您的位置:首页 > 理论基础 > 计算机网络

Python网络数据采集11(译者:哈雷)

2016-08-11 14:44 801 查看
第九章 利用表格和登录日志

在爬取数据的过程中,经常需要提交表单或者登录信息的情况,本章我们将讲述部分此类问题的解决方法,涉及到验证码的情况后续讲解。我们利用书本中提供的一个简单的表单来讲解,网址为http://pythonscraping.com/pages/files/form.html 由此我们可以查看其源代码

<form method="post" action="processing.php">
First name: <input type="text" name="firstname"><br>
Last name: <input type="text" name="lastname"><br>
<input type="submit" value="Submit">
</form>


如上所示,我们需要提交first name 和last name,它们的属性中name的部分分别为firstname 和lastname,这个属性非常重要。另外,在表头部分的action中是processing.php.这是处理表单内容的网址的绝对地址,也就是说我们向http://pythonscraping.com/files/processing.php这个网址提交数据,所以在写程序的时候应该是这个网址,而填写表单的网址权当一层包装吧。有了上面的讲述,下面给出一个示例

import requests
params = {'firstname': 'Ali', 'lastname': 'chen'}#根据需要自行填写名称,<span style="color:#FF0000;">但是firstname 和lastname不能修改,一定要与上述的input标签的name属性的内容相同</span>
r = requests.post("http://pythonscraping.com/files/processing.php", data=params)#处理表格的网址(action后跟的地址)
print(r.text)


下面用一个真实的示例,大家首先申请一个吾志(写随想的网址)的账号

import requests
params = {'email': 'your_email', 'password': 'your_password'}#填写自己的账号和密码,email和password要和网站上的对应
r = requests.post("https://wuzhi.me/login", data=params) #网址要和action后的网址对应
<pre name="code" class="python">r = requests.get("https://wuzhi.me/u/256856", cookies=r.cookies) #利用cookies,获取文章信息
print(r.text)#这样就获得了自己的吾志内容
```
在表单中经常会遇到复选框,单选框等情况,与上述情况相同,只要名称和值相对应就好了,名称和值可以通过查看源代码或者浏览器自带的调试工具。书中还提到了文件和图像的提交,这个很少遇到,暂时不讲了。在以上示例中,我们用到了cookies,它就是记录登录信息的(可以理解为通行证),利用该信息就可以访问更多内容。但是如果网页多而且复杂,cookies可能是变化的,则我们尽量使用以下形式


import requests
session = requests.Session()
params = {'email': 'your_email', 'password': 'your_password'}
r = requests.post("https://wuzhi.me/login", data=params)
r = session.get("https://wuzhi.me/u/256856")
print(r.text)#这样就获得了自己的吾志内容


session会自动跟踪各种登录信息,不用我们手动添加。除了这种情况,还有一种更加严格的验证方式,例如http://pythonscraping.com/pages/auth/login.php这样的情况出现时使用以下方法解决

import requests
from requests.auth import AuthBase
from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth('ryan', 'password')#直接给出账号和密码即可
r = requests.post(url="http://pythonscraping.com/pages/auth/login.php", auth=auth)#给出auth=auth即可
print(r.text)


对于验证码和其他无法访问页面的问题将在11和12章描述
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: