Python利用requests模擬登陸豆瓣
要抓取豆瓣電影的評論,我們需要登入自己的賬戶,才能爬取到所有的評論,豆瓣模擬登陸相對而言比較簡單,這裡我簡單分析一下,希望能夠對大家理解模擬登陸有所啟發。
Chorme瀏覽器輸入:https://www.douban.com,按下F12,點選Network選項,如下圖所示:
按下F12後切換至Network選項
如上圖所示,輸入賬號密碼,注意密碼隨便輸入就行了(密碼對錯無所謂)。點選登入豆瓣,來到如下頁面:
注意看Requests Methods 為POST
主要看Form Data中的引數
點選all選項,可以看到有個login請求,在Headers選項中可以看到該請求是一個post請求,其請求的url為:https://www.douban.com/accounts/login,請求的方法為POST,post傳送的資料是Form Data中的內容,因而我們可以利用requests構造一個請求,到達模擬登陸的效果。
有時候會有驗證碼,這時只需要先get請求一下登陸url,把驗證碼下載到本地,然後利用Python的PIL庫自動開啟驗證碼圖片,輸入驗證碼就可以了!
程式完整程式碼如下:
# _*_coding:utf-8 _*_
import requests
from bs4 importBeautifulSoup
import re
from PIL importImage
import os
def loginin():
global session
session = requests.Session()
url='https://www.douban.com/accounts/login'
name='你的使用者名稱'
psw='密碼'
headers={
"Host":"www.douban.com",
"User-Agent":"'Mozilla/5.0 (Windows NT 6.1; rv:53.0)Gecko/20100101 Firefox/53.0'",
"Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding":"gzip,deflate",
"Connection":"keep-alive"
}
data={
'form_email':name,
'form_password':psw,
'source':'index_nav',
'remember':'on'
}
captcha=session.get(url,headers=headers,timeout=30)
soup=BeautifulSoup(captcha.content,'lxml')
img=soup.find_all('img',id='captcha_image')
print img
if img:
captcha_url=re.findall('src="(.*?)"',str(img))[0]
print u'驗證碼所在標籤為:',captcha_url
a=captcha_url.split('&')[0]
capid=a.split('=')[1]
print capid
cap=session.get(captcha_url,headers=headers).content
with open('captcha.jpg','wb') as f:
f.write(cap)
f.close()
im = Image.open('captcha.jpg')
im.show()
#print captcha.content
capimg=raw_input('請輸入驗證碼:')
newdata={
'captcha-solution':capimg,
'captcha-id':capid
}
data.update(newdata)
print data
os.remove('captcha.jpg')
else:
print '不存在驗證碼,請直接登陸'
r=session.post(url,data=data,headers=headers,timeout=30)
## print(r.content)
## print r.status_code
## #print r.cookies
## html=session.get('https://movie.douban.com/')
## print html.status_code
## print html.content
## print html.cookies
##
if __name__=='__main__':
loginin()
原始碼 群 960410445
沒有驗證碼的情形
上圖演示是不帶驗證碼的情況,有驗證碼的情況程式會自動開啟驗證碼圖片,自己輸入驗證碼就可以了!
以上就是利用requests.post()模擬登陸豆瓣的方法,其它網站模擬登陸的方法與豆瓣相似,都是通過F12分析,分析出瀏覽器向哪個url ,post了什麼資料,然後通過人為構造請求頭,來達到模擬登陸的目的。
模擬登陸對於那些需要登陸才能看到資訊的網站非常有用,因此,有必要自己分析,加以掌握。在後面的內容中,我們會用到模擬登陸豆瓣來抓取豆瓣上的影評。