表单交互与模拟登录
表单交互
什么是表单交互
使用python实现表单提交
无论是简单网页还是采用异步加载的网页,都是使用GET方法请求网址来请求网页信息;
如果想获得登录表单后的信息,就需要进行表单交互。
requests的post方法
import requests
payload = {
'key1': 'value1',
'key2': 'value2'
}
res = requests.post(url, data=payload)
res.encoding = 'utf-8'
res.text
1、查看网页源代码提交表单
以豆瓣网为例:https://www.douban.com/
找到登录表单,查看网页源代码
找到form标签,知道登录数据往action="https://www.douban.com/accounts/login"传;
找到form中的input标签,知道传输哪些数据:
<input type="hidden" value="index_nav" name="source">
<input type="text" name="form_email" id="form_email" value="" class="inp" placeholder="邮箱 / 手机号" tabindex="1" data-form-un="1533350332326.7986">
<input name="form_password" placeholder="密码" id="form_password" class="inp" type="password" tabindex="2" data-form-pw="1533350332326.7986">
传入data的内容为:name: value
import requests
url = 'https://www.douban.com/accounts/login'
payload = {
'source' : 'index_nav',
'form_email': [email protected],
'form_password': xxx
}
res = request.post(url, data=payload)
res.encoding='utf-8'
page = res.text
2、逆向工程提交表单
还有另一种方式,查看提交表单内容;
使用浏览器开发者工具,进入Network,输入账号密码登录后查看抓到的数据包。
模拟登录
有些时候表单数据可以通过加密或者其他形式进行包装,增大了构造表单的难度;
有些时候还需要输入验证码;
这个时候可以选择提交cookie信息进行模拟登录,绕过表单。
cookie概述
存储用户信息的本地文件;
某些网站为了辨别用户身份进行session跟踪保存在用户本地终端上的数据。
提交cookie模拟登录
import requests
url = 'https://www.douban.com/'
headers ={
'Cookies':'xxxx'
}
request.get(url,headers=headers)
爬取拉勾网招聘信息
进入拉勾网主页 https://www.lagou.com/,搜索python
然后查看网页源代码,无法搜索到页面显示的招聘信息;
换页查看,发现浏览器显示的url也并没有发生改变,所以换页其实也是通过AJAX做的;
F12查看XHR,可以知道它是通过提交form表单请求数据,然后返回一个Json数据
我们只需要获取它的Json数据;
此外,每页展示15条,总共3837条;页面上只展示30页(450条)