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

第九章 利用表格和登录日志
在爬取数据的过程中,经常需要提交表单或者登录信息的情况,本章我们将讲述部分此类问题的解决方法,涉及到验证码的情况后续讲解。我们利用书本中提供的一个简单的表单来讲解,网址为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章描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值