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,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了什么数据,然后通过人为构造请求头,来达到模拟登陆的目的。 模拟登陆对于那些需要登陆才能看到信息的网站非常有用,因此,有必要自己分析,加以掌握。在后面的内容中,我们会用到模拟登陆豆瓣来抓取豆瓣上的影评。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |