转自:http://www.ituring.com.cn/article/200288?utm_source=tuicool&utm_medium=referral
当你想编写更为复杂的网页爬虫的时候,你面临的第一个问题也许会是:“如何获取登陆页面后的信息?”,因为网络已经飞快地向互动、社交媒体、用户生成内容方向发展。表格和登陆就成为这些类型网站几乎不可或缺的主要组成。幸运的是,表单和登陆还是相对比较容易处理的。
截至当前,在我们之前的爬虫示例中,绝大部分与服务器的交互都是采用了HTTP GET方式去获取信息的。而在本章,我们所关注的是如何通过POST方式来向服务器提交信息用于存储和分析。
表单给用户提供了一种服务器可以理解并使用的,提交POST请求的简单方法。就像网址链接可以帮助用户格式化GET请求,HTML表单可以帮用户格式化POST请求。当然通过一小段代码,我们就可以轻松的通过爬虫来创建并提交表单。
Python Requests类库
尽管可以通过Python核心类库来操作网页表单,但有些时候更友好的代码可以让生活更美好。当你开始使用urllib类库的GET请求做更多事情的时候,放眼Python核心库之外也许更有帮助。
Requests类库在处理复杂HTTP请求、Cookies,请求头等方面更为高效,此处便是Requests类库的创建者Kenneth Reitz对Python核心工具的评价:Python标准urlib2模块提供了你所需要的绝大多数HTTP功能,但是其API却很垃圾。它的创建是用于不同时间以及不同网页的,即使执行一个简单的任务也需要大量的工作(甚至重写方法等)。
事情并不应该如此,至少在Python中不应如此。
和其他Python类库一样,Requests类库可以通过Python第三方类库管理器如pip来安装,或者直接下载源代码进行安装。
提交一个简单表单
绝大多数网页表单由部分HTML标签、提交按钮以及一个Action页(具体执行表单任务的网址)所组成。HTML标签一般含有文本标签不过有时候也包含文件上传或其他非文本内容标签。
大多数热门网站在robots.txt文件中屏蔽了针对登录表单的访问(详见附录C),因此为了更安全的玩耍,我在pythonscraping.com上创建了一系列不同类型的表单和登录页面。你可以运行你的爬虫来访问他们。其中最为简单的表单地址为:http://bit.ly/1AGKPRU
完整表单代码如下:
First name:
Last name:
在此处需要注意的是:第一,两个input标签的名称为first