python爬蟲(chóng)之模擬登陸csdn的實(shí)例代碼
python模擬登陸網(wǎng)頁(yè)主要使用到urllib、urllib2、cookielib及BeautifulSoup等基本模塊,當(dāng)然進(jìn)階階段我們還可以使用像requests等更高級(jí)一點(diǎn)的模塊。其中BeautifulSoup模塊在匹配html方面,可以很好的代替re,使用起來(lái)更方便,對(duì)于不會(huì)使用正則的人來(lái)說(shuō)是福音。
本文使用python2.7
原理
模擬登陸前,我們需要先知道csdn是如何登陸的。我們通過(guò)google chrome瀏覽器先來(lái)分析下:
1.chrome瀏覽器用F12或ctrl+shift+I啟動(dòng)開(kāi)發(fā)者工具,并訪問(wèn)csdn登陸頁(yè)面,在開(kāi)發(fā)者工具中對(duì)”P(pán)reserver log”選項(xiàng)打勾,表示跳轉(zhuǎn)時(shí)不清楚之前的訪問(wèn)記錄。
2.輸入用戶名密碼后,網(wǎng)頁(yè)進(jìn)行跳轉(zhuǎn),此時(shí)我們查看訪問(wèn)記錄中Method為POST的鏈接的headers,可以看到
Request header:
Cache-Control:no-cache Cache-Control:no-store Connection:keep-alive Content-Encoding:gzip Content-Type:text/html;charset=UTF-8 Date:Fri, 05 Aug 2016 03:51:56 GMT Expires:Thu, 01 Jan 1970 00:00:00 GMT Keep-Alive:timeout=20 Pragma:no-cache Server:openresty Set-Cookie:UD=%E4%BB%8A%E5%A4%A9%E4%B8%8D%E8%B5%B0%EF%BC%8C%E6%98%8E%E5%A4%A9%E5%8D%B3%E4%BD%BF%E8%B7%91%E4%B9%9F%E4%B8%8D%E4%B8%80%E5%AE%9A%E8%B7%9F%E5%BE%97%E4%B8%8A%EF%BC%81; Domain=.csdn.net; Path=/ Set-Cookie:UserName=yanggd1987; Domain=.csdn.net; Path=/ Set-Cookie:UserInfo=RjXwn4OfICh68ZVTzEjJxlcez5O%2B8RMsVvAiTV6uo4n4q1orcuBFZz29qx%2BUZ7JPFQQivvFGwFaC97NpT%2FKhtcZ2U%2B%2BzivoNtu5nTyg717xzimpeHcoutwnMg%2F5S8ZlARzA8H48TOftvUJUB0mxylQ%3D%3D; Domain=.csdn.net; Path=/ Set-Cookie:UserNick=man8er; Domain=.csdn.net; Path=/ Set-Cookie:AU=A3E; Domain=.csdn.net; Path=/ Set-Cookie:CASTGC=TGT-63516-e4e600adR5WiJAFintPeHqNCpGRvO9w7nHBYtY5XUCc2BPCCcG-passport.csdn.net; Path=/; Secure Set-Cookie:UN=yanggd1987; Domain=.csdn.net; Expires=Sat, 05-Aug-2017 03:51:55 GMT; Path=/ Set-Cookie:UE="yanggd1987@163.com"; Version=1; Domain=.csdn.net; Max-Age=31536000; Expires=Sat, 05-Aug-2017 03:51:55 GMT; Path=/ Set-Cookie:BT=1470369115868; Domain=.csdn.net; Expires=Sat, 05-Aug-2017 03:51:55 GMT; Path=/ Set-Cookie:access-token=0bd99cf6-c5bf-4683-89b8-9d8678bebff9; Domain=.csdn.net; Path=/ Transfer-Encoding:chunked Vary:Accept-Encoding
有以上可以看出登陸過(guò)程中有cookie
POST提交的數(shù)據(jù):
username:XXXXXXXXX password:XXXXXXXXX lt:LT-52961-eMo02Bz4tlj3wQz4QMuO173GCIdsqE execution:e15s1 _eventId:submit
其中username和password表示我們登陸的賬戶和密碼,那lt、execution表示什么呢?不要急,我們看看登陸頁(yè)面網(wǎng)站的源代碼:
<form id="fm1" action="/account/login?from=http%3A%2F%2Fmy.csdn.net%2Fmy%2Fmycsdn" method="post">
<input id="password" name="password" tabindex="2" placeholder="輸入密碼" class="pass-word" type="password" value="" autocomplete="off">
<div class="row forget-password">
<span class="col-xs-6 col-sm-6 col-md-6 col-lg-6">
<input type="checkbox" name="rememberMe" id="rememberMe" value="true" class="auto-login" tabindex="4">
<label for="rememberMe">下次自動(dòng)登錄</label>
</span>
<span class="col-xs-6 col-sm-6 col-md-6 col-lg-6 forget tracking-ad" data-mod="popu_26">
<a href="/account/fpwd?action=forgotpassword&service=http%3A%2F%2Fmy.csdn.net%2Fmy%2Fmycsdn" rel="external nofollow" tabindex="5" target="_blank">忘記密碼</a>
</span>
</div>
<!-- 該參數(shù)可以理解成每個(gè)需要登錄的用戶都有一個(gè)流水號(hào)。只有有了webflow發(fā)放的有效的流水號(hào),用戶才可以說(shuō)明是已經(jīng)進(jìn)入了webflow流程。否則,沒(méi)有流水號(hào)的情況下,webflow會(huì)認(rèn)為用戶還沒(méi)有進(jìn)入webflow流程,從而會(huì)重新進(jìn)入一次webflow流程,從而會(huì)重新出現(xiàn)登錄界面。 -->
<input type="hidden" name="lt" value="LT-53452-VLvC2gjfxdj4jheoUJQRkIXgoDZfc3">
<input type="hidden" name="execution" value="e16s1">
<input id="username" name="username" tabindex="1" placeholder="輸入用戶名/郵箱/手機(jī)號(hào)" value="用戶名" class="user-name" type="text"><input type="hidden" name="_eventId" value="submit">
<input class="logging" accesskey="l" value="登 錄" tabindex="6" type="button">
</form>
上面注釋的內(nèi)容就是說(shuō)明參數(shù)lt和execution的,就是在登陸過(guò)程中webflow會(huì)動(dòng)態(tài)分配一個(gè)流水號(hào)LT-53452-VLvC2gjfxdj4jheoUJQRkIXgoDZfc3,我們只用獲取到這個(gè)流水號(hào)才能夠進(jìn)行登陸。
從上面通過(guò)chrome分析得到,登陸csdn必須有cookie并且獲取到webflow分配的流水號(hào);;并且訪問(wèn)時(shí)必須有user-agent,否則客戶端會(huì)被屏蔽。
實(shí)現(xiàn)
1.由于我們的系統(tǒng)是centos6.5,默認(rèn)使用python2.6,因此我們需要先安裝python2.7并安裝相關(guān)第三方模塊
(1)yum安裝
rpm -Uvh https://centos6.iuscommunity.org/ius-release.rpm yum -y install python27 python27-devel python27-pip python27-setuptools
#安裝相關(guān)第三方模塊
pip2.7 install beautifulsoup4 pip2.7 install lxml
(2)編譯安裝
安裝python.2.7
wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz tar -zxvf Python-2.7.12.tgz cd Python-2.7.12 ./configure --prefix=/usr/local/python2.7 make && make install #環(huán)境變量 vim /etc/profile export PATH=/usr/local/python2.7/bin:$PATH source /etc/profile #安裝setuptools wget https://pypi.python.org/packages/46/db/baa571da945ff731f3739a119574e89b12add9b05c03842103bd641d0990/setuptools-25.1.3.tar.gz#md5=0dcb9990901cb6e9631db195d4e775a7 tar -zxvf setuptools-25.1.3.tar.gz cd setuptools-25.1.3 python2.7 setup.py install #安裝pip wget https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz#md5=87083c0b9867963b29f7aba3613e8f4a tar -zxvf pip-8.1.2.tar.gz cd pip-8.1.2 python2.7 setup.py install #安裝相關(guān)第三方模塊 pip2.7 install beautifulsoup4 pip2.7 install lxml
注意: 通過(guò)編譯安裝的pip2.7 安裝lxml會(huì)報(bào)錯(cuò),因此還是建議使用yum安裝的pip2.7
2.代碼實(shí)現(xiàn)
vim csdn_login.py
#!/usr/bin/env python2.7
#-*- coding: utf-8 -*-
import urllib
import urllib2
import cookielib
from bs4 import BeautifulSoup
filename = 'cookie_csdn.txt'
#聲明一個(gè)MozillaCookieJar對(duì)象實(shí)例來(lái)保存cookie,之后寫(xiě)入文件
cookie = cookielib.MozillaCookieJar(filename)
#利用urllib2庫(kù)的HTTPCookieProcessor對(duì)象來(lái)創(chuàng)建cookie處理器
handler = urllib2.HTTPCookieProcessor(cookie)
#通過(guò)handler來(lái)構(gòu)建opener
opener = urllib2.build_opener(handler)
loginurl = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
#登陸前準(zhǔn)備:獲取lt和exection
response = opener.open(loginurl)
soup = BeautifulSoup(response.read(), "lxml")
for input in soup.form.find_all("input"):
if input.get("name") == "lt":
lt = input.get("value")
if input.get("name") == "execution":
execution = input.get("value")
#post信息
values = {
"username":"用戶名",
"password":"密碼",
"lt":lt,
"execution":execution,
"_eventId":"submit"
}
postdata = urllib.urlencode(values)
opener.addheaders = [("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36")]
#模擬登錄,保存cookie到cookie.txt中
result = opener.open(loginurl, postdata)
cookie.save(ignore_discard=True, ignore_expires=True)
#登陸后我們隨意跳轉(zhuǎn)到博客
url = "http://blog.csdn.net/XXXXXXXXX"
result = opener.open(url)
3.運(yùn)行
python2.7 csdn_login.py
至此,當(dāng)我們登陸后,可以隨意指定一個(gè)頁(yè)面進(jìn)行登陸了。
總結(jié)
1.urllib和urllib2配合使用,因?yàn)閡rllib可以將post數(shù)據(jù)進(jìn)行encode,而urllib2不可以
2.由于使用cookie、header等,用到了urllib2的基礎(chǔ)庫(kù)opener實(shí)現(xiàn)訪問(wèn)等操作,當(dāng)然也可以使用urllib2.Request(url,data,header)等其他訪問(wèn)方式。
3.每個(gè)網(wǎng)站登錄方式可能不一樣,我們需要根據(jù)實(shí)際情況分析。
4.模擬登陸是我們通過(guò)實(shí)戰(zhàn)學(xué)習(xí)python的一種方法,而不是用它來(lái)惡意攻擊。
以上這篇python爬蟲(chóng)之模擬登陸csdn的實(shí)例代碼就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 使用os.remove刪除文件夾時(shí)報(bào)錯(cuò)的解決方法
下面小編就為大家?guī)?lái)一篇Python 使用os.remove刪除文件夾時(shí)報(bào)錯(cuò)的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
Python 稀疏矩陣-sparse 存儲(chǔ)和轉(zhuǎn)換
這篇文章主要介紹了Python 稀疏矩陣-sparse 存儲(chǔ)和轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2017-05-05
Python應(yīng)用開(kāi)發(fā)頻繁假死的問(wèn)題分析及解決
最近在開(kāi)發(fā)一款自動(dòng)化的應(yīng)用,但是,在測(cè)試時(shí),卻發(fā)現(xiàn)了問(wèn)題,當(dāng)我點(diǎn)擊暫停任務(wù)后,此時(shí)子線程被阻塞,如果我這個(gè)時(shí)候點(diǎn)擊停止,那么就會(huì)任務(wù)結(jié)束,之后,如果我再點(diǎn)擊開(kāi)始運(yùn)行,整個(gè)應(yīng)用就會(huì)卡死,所以本文介紹了Python應(yīng)用開(kāi)發(fā)頻繁假死的問(wèn)題分析及解決,需要的朋友可以參考下2024-08-08
基于python實(shí)現(xiàn)簡(jiǎn)單日歷
這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)簡(jiǎn)單日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Python編程使用matplotlib繪制動(dòng)態(tài)圓錐曲線示例
這篇文章主要介紹了Python使用matplotlib繪制動(dòng)態(tài)的圓錐曲線示例實(shí)現(xiàn)代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
Python基于mysql實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python基于mysql實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02

