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或者包含兩個(gè)元素的元組列表轉(zhuǎn)換成url參數(shù)。例如 字典{'name': 'dark-bull', 'age': 200}將被轉(zhuǎn)換為"name=dark-bull&age=200"

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

成功爬去的html信息

5.帶驗(yàn)證碼的模擬登錄:

思路:

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

參考:

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


key:

每次驗(yàn)證碼都不同

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


抓包觀察:

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

對比,就connection不同

xsmainfs返回302

302是什么?

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

為什么返回302呢?

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

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


模擬登陸成功:

返回200
返回200

接下類要獲取個(gè)人信息的數(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.自動(dòng)化識別驗(yàn)證碼

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


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

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

HTTPError是URLError的子類,在你利用urlopen方法發(fā)出一個(gè)請求時(shí),服務(wù)器上都會(huì)對應(yīng)一個(gè)應(yīng)答對象response,其中它包含一個(gè)數(shù)字”狀態(tài)碼”。舉個(gè)例子,假如response是一個(gè)”重定向”,需定位到別的地址獲取文檔,urllib2將對此進(jìn)行處理。
其他不能處理的,urlopen會(huì)產(chǎn)生一個(gè)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用一個(gè)Request對象來映射你提出的HTTP請求,在它最簡單的使用形式中你將用你要請求的地址創(chuàng)建一個(gè)Request對象,通過調(diào)用urlopen并傳入Request對象,將返回一個(gè)相關(guān)請求response對象,這個(gè)應(yīng)答對象如同一個(gè)文件對象,所以你可以在Response中調(diào)用.read()。

urllib2.build_opener()

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,665評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,627評論 2 380

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

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