1. 程式人生 > >Python利用requests模擬登陸豆瓣

Python利用requests模擬登陸豆瓣

要抓取豆瓣電影的評論,我們需要登入自己的賬戶,才能爬取到所有的評論,豆瓣模擬登陸相對而言比較簡單,這裡我簡單分析一下,希望能夠對大家理解模擬登陸有所啟發。

Chorme瀏覽器輸入:https://www.douban.com,按下F12,點選Network選項,如下圖所示:

Python利用requests模擬登陸豆瓣

按下F12後切換至Network選項

Python利用requests模擬登陸豆瓣

如上圖所示,輸入賬號密碼,注意密碼隨便輸入就行了(密碼對錯無所謂)。點選登入豆瓣,來到如下頁面:

Python利用requests模擬登陸豆瓣

注意看Requests Methods 為POST

Python利用requests模擬登陸豆瓣

主要看Form Data中的引數

Python利用requests模擬登陸豆瓣

點選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()

Python利用requests模擬登陸豆瓣

原始碼 群 960410445  

沒有驗證碼的情形

上圖演示是不帶驗證碼的情況,有驗證碼的情況程式會自動開啟驗證碼圖片,自己輸入驗證碼就可以了!

以上就是利用requests.post()模擬登陸豆瓣的方法,其它網站模擬登陸的方法與豆瓣相似,都是通過F12分析,分析出瀏覽器向哪個url ,post了什麼資料,然後通過人為構造請求頭,來達到模擬登陸的目的。

模擬登陸對於那些需要登陸才能看到資訊的網站非常有用,因此,有必要自己分析,加以掌握。在後面的內容中,我們會用到模擬登陸豆瓣來抓取豆瓣上的影評。