1. 程式人生 > >python爬蟲6——模擬登陸人人網

python爬蟲6——模擬登陸人人網

用python怎麼自動登入一個網站呢?之前我也有過這樣的疑問,老自己去填,多麻煩啊,接下來這篇文章將講解怎麼用python2模擬登陸人人網。

一、用fiddler檢視登入資訊

模擬登陸第一步,用fiddler檢視發出訪問資訊的請求:

網頁:

輸入多次後,會要求輸入驗證碼:

密碼我這裡輸入的是123,找到這個訪問請求:

二、檢索相關元素

ok,找到了它的請求引數,下一步,我們檢索每一個引數對應的標題,採用谷歌瀏覽器檢視,如使用者名稱部分:

<input type="text" name="email" class="input-text" id="email" tabindex="1" value="" style="color: rgb(51, 51, 51);">

實際上有三個值是由必要傳的,如email、password和icode(驗證碼)

 

三、擼程式碼

1,構建session請求

# 構建一個Session物件,可以儲存頁面Cookie

sess = requests.Session()

# 請求報頭

headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

# 首先獲取登入頁面,找到需要POST的資料(_xsrf),同時會記錄當前網頁的Cookie值

html = sess.get("http://www.renren.com/", headers = headers).text

2,解析出驗證碼地址

核心程式碼:bs.select("#verifyPic_login")[0].attrs.get(u'src')

bs = BeautifulSoup(html, 'html.parser')

# 這是驗證碼

icode = bs.select("#icode")

captcha_url = bs.select("#verifyPic_login")[0].attrs.get(u'src')

print "captcha_url",captcha_url

captcha_data = sess.get(captcha_url, headers=headers).content

3,根據url下載驗證碼,並手工輸入文字

def captcha(captcha_data):

with open("icode.jpg", "wb") as f:

f.write(captcha_data)

text = raw_input("請輸入驗證碼:")

# 返回使用者輸入的驗證碼

return text

4,構建data、傳送請求

檢視下下來的圖片:

返回的text可以用作構建data:

data = {

"email":"",

"password":"",

"icode":text

}

email和password填自己的就可以了

# 傳送登入需要的POST資料,獲取登入後的Cookie(儲存在sess裡)

response = sess.post("http://www.renren.com/ajaxLogin/login", data=data, headers=headers)

print response.text

之後再已同一個session發起請求就可以了!