python--爬蟲(模擬登錄)

1.爬取baidu

baidudemo.py
#!/usr/bin/python
#-- coding:gb18030 --
import urllib2

response = urllib2.urlopen("http://www.baidu.com")
print response.read()

urllib2.urlopen
(url[, data[, timeout[, cafile[, capath[, cadefault[, context]]]]])
Open the URL url, which can be either a string or a Request
object.

2.爬取baidu

#!/usr/bin/python
#-*- coding:gb18030 -*-
import urllib
import urllib2
request = urllib2.Request("http://www.baidu.com")  
response = urllib2.urlopen(request)
print response.read()

class urllib2.Request
(
url[, data][, headers][, origin_req_host][, unverifiable]
)

This class is an abstraction of a URL request.
url should be a string containing a valid URL.
data may be a string specifying additional data to send to the server, or None

3.模擬登錄

firefox查看提交的表單
#!/usr/bin/python
#-*- coding:gb18030 -*-
import requests
data={"userBean.loginName":"admin","userBean.loginPass":"52f9001b1e75069f3c8c8daac9961b8a"}      
s=requests.session()
#s.post(url='http://10.50.x.x/portal/login_init.action',data=data) #失敗    
s.post(url='http://10.50.x.x/admin/login_login.action',data=data)# 成功 
r=s.get('http://10.50.x.x/admin/login_login.action')
print r.text
html信息

Python爬蟲教程——模擬登錄|Yiner in Python
Requests:Python的HTTP庫

4.模擬登錄

import urllib
import urllib2
values = {"userBean.loginName":"admin","userBean.loginPass":"52f9001b1e75069f3c8c8daac9961b8a"}
data = urllib.urlencode(values)
url = "http://10.50.x.x/admin/login_login.action"
request = urllib2.Request(url,data)
response = urllib2.urlopen(request)
print response.read()

urllib.urlencode(query[, doseq]):將dict或者包含兩個元素的元組列表轉(zhuǎn)換成url參數(shù)凫碌。例如 字典{'name': 'dark-bull', 'age': 200}將被轉(zhuǎn)換為"name=dark-bull&age=200"

Python urllib模塊的URL編碼解碼功能

成功爬去的html信息

5.帶驗證碼的模擬登錄:

思路:

a.先打開登陸頁面每币,獲得cookies。
b.再訪問驗證碼的地址。驗證碼是動態(tài)的,每次打開都不一樣。
c.識別驗證碼偎谁。這里就需要你處理、識別剛才得到的驗證碼纲堵。自己去找驗證碼(captcha)識別庫巡雨,python可以用 pytesser(這個庫是調(diào)用PIL來處理識別的) 、openc 之類的 或者可以人工識別然后手動輸入驗證碼席函。
d.構(gòu)造post請求數(shù)據(jù)(request data)和請求頭部(request head) 铐望,然后 將構(gòu)造的請求 post給網(wǎng)站
f.獲取 響應(yīng)(response)信息,并通過測試來驗證登陸是否成功茂附≌埽或者直接跳過a步驟:

參考:

用Python模擬登錄正方教務(wù)系統(tǒng)并抓取初始網(wǎng)頁的一些個人筆記
python爬蟲實戰(zhàn)之模擬正方教務(wù)系統(tǒng)登錄查詢成績
python刷課腳本(正方教務(wù)系統(tǒng))
教務(wù)系統(tǒng)爬蟲


key:

每次驗證碼都不同

CheckCode.aspx

![error] VirtualBox VM, 今天 at 下午3.27.00.png](http://upload-images.jianshu.io/upload_images/1423035-bbee7f98f581abb0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
HTTP Error 302:
成功應(yīng)該是返回200

返回碼:200

編碼問題:

![] VirtualBox VM, 今天 at 下午3.58.35.png](http://upload-images.jianshu.io/upload_images/1423035-9c77238fb5522e2d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
RadioButtionList1:學(xué)生
先把‘學(xué)生’以utf8進(jìn)行解碼,然后編碼成gbk营曼,最后再進(jìn)行url編碼乒验。


輸出:%D1%A7%C9%FA


正常登陸的過程

先Post 訪問default3.aspx
然后再get訪問xsmainfs.aspx?xh=xxxx
還需要再訪問 xstop.aspx和xsleft.aspx


post數(shù)據(jù)到default3.aspx后會重定向到/xsmainfs.aspx?xh=xx
post數(shù)據(jù)到default3.aspx后會返回302狀態(tài)碼
同樣去訪問xsmainfs.aspx的時候也會返回302狀態(tài)碼蒂阱,正常情況下應(yīng)該是200


抓包觀察:

post過去的數(shù)據(jù)
?第一次返回信息
get訪問xsmainfs.aspx锻全,帶cookie
firefox debug

對比,就connection不同

xsmainfs返回302

302是什么录煤?

302重定向又稱之為302代表暫時性轉(zhuǎn)移(Temporarily Moved )鳄厌,英文名稱:302 redirect。 也被認(rèn)為是暫時重定向(temporary redirect)妈踊,一條對網(wǎng)站瀏覽器的指令來顯示瀏覽器被要求顯示的不同的URL了嚎,當(dāng)一個網(wǎng)頁經(jīng)歷過短期的URL的變化時使用。一個暫時重定向是一種服務(wù)器端的重定向廊营,能夠被搜索引擎蜘蛛正確地處理歪泳。

為什么返回302呢?

302不是錯誤, 是http code. 再header中, 會有Location: http://url.com, 告訴瀏覽器, 下一步的地址, 瀏覽器檢測到后, 跳轉(zhuǎn)到新地址http//url.com.

應(yīng)該要返回200才對


模擬登陸成功:

返回200
返回200

接下類要獲取個人信息的數(shù)據(jù)

  • get方式:
    xsxx.aspx?xh=xx&xh1=xxx
  • 獲取網(wǎng)頁
  • 正則表達(dá)式提取數(shù)據(jù)
    <span id="xh">14055301xx</span></td>
    <span id="xm">姓名</span></td>
    <span id="csrq">?出生日期</span></td>
    <span id="xb">性別</span></td>
    <span id="rxrq">入學(xué)日期</span></td>
    <span id="mz">?民族</span></td>
    <span id="zymc">專業(yè)名稱</span></td>
    <span id="zyfx">專業(yè)方向</span></td>
    <span id="xymc">學(xué)院名稱</span></td> <span id="bjmc">班級名稱</span></td>
    <span id="sfzh">?身份證號</span></td> <span id="dqszj">?年級</span></td> <span id="ksh">考生號</span></P> <span id="xz">學(xué)制</span></td>
    <span id="syszd">生源所在地</span></td>
    <span id="zzmm">政治面貌</span></td>
    <span id="xjzt">學(xué)籍狀態(tài)</span></td>

目標(biāo):

1.模塊化
2.存入數(shù)據(jù)庫
3.自動化識別驗證碼

google:python 正方教務(wù)系統(tǒng)
一堆。。舞痰。


【總結(jié)】Python 2.x中常見字符編碼和解碼方面的錯誤及其解決辦法

302:請求到的資源在一個不同的URL處臨時保存 處理方式:重定向到臨時的URL

HTTPError是URLError的子類,在你利用urlopen方法發(fā)出一個請求時荸哟,服務(wù)器上都會對應(yīng)一個應(yīng)答對象response假哎,其中它包含一個數(shù)字”狀態(tài)碼”。舉個例子鞍历,假如response是一個”重定向”舵抹,需定位到別的地址獲取文檔,urllib2將對此進(jìn)行處理劣砍。
其他不能處理的惧蛹,urlopen會產(chǎn)生一個HTTPError,對應(yīng)相應(yīng)的狀態(tài)嗎刑枝,HTTP狀態(tài)碼表示HTTP協(xié)議所返回的響應(yīng)的狀態(tài)香嗓。下面將狀態(tài)碼歸結(jié)如下:


還需要在代碼里面添加訪問xstop.aspx(帶header和cookie)
以確定是否真正模擬登陸成功


urllib2.Request()

urllib2用一個Request對象來映射你提出的HTTP請求,在它最簡單的使用形式中你將用你要請求的地址創(chuàng)建一個Request對象,通過調(diào)用urlopen并傳入Request對象装畅,將返回一個相關(guān)請求response對象靠娱,這個應(yīng)答對象如同一個文件對象,所以你可以在Response中調(diào)用.read()掠兄。

urllib2.build_opener()

同樣像云,可以使用build_opener,這是一個更加方便的函數(shù)蚂夕,用來創(chuàng)建opener對象迅诬,他只需要一次函數(shù)調(diào)用。
build_opener默認(rèn)添加幾個處理器婿牍,但提供快捷的方法來添加或更新默認(rèn)處理器侈贷。
其他的處理器handlers你或許會希望處理代理,驗證等脂,和其他常用但有點特殊的情況铐维。
install_opener 用來創(chuàng)建(全局)默認(rèn)opener。這個表示調(diào)用urlopen將使用你安裝的opener慎菲。
Opener對象有一個open方法。

Python:urllib 和urllib2之間的區(qū)別
cookielib和urllib2模塊相結(jié)合模擬網(wǎng)站登錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锨并,一起剝皮案震驚了整個濱河市露该,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌第煮,老刑警劉巖解幼,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異包警,居然都是意外死亡撵摆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門害晦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來特铝,“玉大人暑中,你說我怎么就攤上這事■杲耍” “怎么了鳄逾?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灵莲。 經(jīng)常有香客問我雕凹,道長,這世上最難降的妖魔是什么政冻? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任枚抵,我火速辦了婚禮,結(jié)果婚禮上明场,老公的妹妹穿的比我還像新娘汽摹。我一直安慰自己,他們只是感情好榕堰,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布竖慧。 她就那樣靜靜地躺著,像睡著了一般逆屡。 火紅的嫁衣襯著肌膚如雪圾旨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天魏蔗,我揣著相機(jī)與錄音砍的,去河邊找鬼。 笑死莺治,一個胖子當(dāng)著我的面吹牛廓鞠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谣旁,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼床佳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了榄审?” 一聲冷哼從身側(cè)響起砌们,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搁进,沒想到半個月后浪感,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡饼问,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年影兽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莱革。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡峻堰,死狀恐怖讹开,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茧妒,我是刑警寧澤萧吠,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站桐筏,受9級特大地震影響纸型,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梅忌,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一狰腌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牧氮,春花似錦琼腔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尸诽,卻和暖如春甥材,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背性含。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工洲赵, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人商蕴。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓叠萍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绪商。 傳聞我的和親對象是個殘疾皇子苛谷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • urllib2是Python的一個獲取URLs的組件。他以urlopen函數(shù)的形式提供了一個非常簡單的接口格郁,具有利...
    查無此人asdasd閱讀 1,499評論 0 3
  • 一抄腔、概述 urllib2是Python的一個針對URLs的庫。他以urlopen函數(shù)的形式提供了一個非常簡單的...
    MiracleJQ閱讀 1,488評論 0 5
  • 今天用 requests + BeautifulSoup 抓取 aliexpress 的時候理张, 在模擬登錄時候出現(xiàn)...
    王獨立閱讀 8,764評論 2 8
  • 一、網(wǎng)絡(luò)爬蟲的定義 網(wǎng)絡(luò)爬蟲绵患,即Web Spider雾叭,是一個很形象的名字。把互聯(lián)網(wǎng)比喻成一個蜘蛛網(wǎng)落蝙,那么Spide...
    隨風(fēng)化作雨閱讀 1,089評論 0 0
  • 成長织狐,就好比我人生中的一艘小船暂幼,行駛在波面上。有時風(fēng)平浪靜移迫,有時也會遇到?jīng)坝颗炫鹊暮@送摇5业某砷L之舟,并不是一帆...
    YolandaYanyoyo閱讀 331評論 3 1