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了什么数据,然后通过人为构造请求头,来达到模拟登陆的目的。

模拟登陆对于那些需要登陆才能看到信息的网站非常有用,因此,有必要自己分析,加以掌握。在后面的内容中,我们会用到模拟登陆豆瓣来抓取豆瓣上的影评。

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/85230952
今日推荐