爬虫之豆瓣的自动登陆

刚刚学习了一下BeautifulSoup模块,尝试着按照视频的教程自己实现了一下豆瓣网的自动登陆。现在将整个学习过程做一下记录。

1、网页分析

如上图所示,为豆瓣网的登陆页面。可以看到登陆链接为

https://accounts.douban.com/login

由于这里存在验证码的问题,而我们目前只是学习阶段,并不需要花钱去买相应的解析接口,所以采取的方式是采用get方法获取验证码,然后将验证码的图片保存为本地图片,通过手动打开读取后填入表中发送登陆请求。

2、方案实施

(1)首先我们需要打开登陆页面获取验证码图片

如图所示,在获取验证码的过程中有两个参数需要填写。一个是captcha-id另外一个就是size。在后面的操作中我们发现size参数总是等于s,所以在post提交时仅需要获得captcha-id即可。以下是实现的代码:

import requests
from bs4 import BeautifulSoup
session=requests.Session()
#首次打开登陆页面,刷新出验证码链接
r1=session.get(
    url='https://accounts.douban.com/login',
    headers={
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
    }

)

soup=BeautifulSoup(r1.text,'html.parser')
#获取验证码链接和captcha-id值
captcha=soup.find(name='img',attrs={'id':'captcha_image'}).get('src')
captcha_id=soup.find(name='input',attrs={'name':'captcha-id'}).get('value')
#采用get方法得到验证码图片
r2=session.get(
    url=captcha,
    headers={
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
    }

)

(2)将获取到的验证码保存到本地

我们将获取到的验证码保存到本地后让用户打开识别后返回输入到程序中提交登陆请求

#保存到本地手动识别
with open('douban.jpg','wb') as f:
    f.write(r2.content)
    f.close()
captcha=input('打开douban.jpg输入验证码:')

(3)将组织好的登陆数据提交登陆

#组织请求体中的数据
form_data= {
'redir': 'https://www.douban.com/',
'form_email':'xxxxxxxx',
'form_password': 'xxxxxx,
'captcha-solution': captcha,
'captcha-id':captcha_id,
'login': '登录'
}
#登陆请求
r3=session.post(
    url='https://accounts.douban.com/login',
    headers={
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
    },
    data=form_data
)

3、验证

将最后得到的r3页面打印出来,然后在结果中搜索自己的用户名信息,可以看到存在用户信息

 总结

在爬取的过程中最重要的一步就是分析登陆提交的方式,如果采用的是提交form表单的方式登陆我们就可以通过测试得到提交时需要的数据项,然后针对性的去获取相应的数据值。比如在本文中很重要的一项就是验证码的captcha-id值,通过分析网页结构提取即可。

猜你喜欢

转载自blog.csdn.net/ytz201201/article/details/84957374