- Python 网络爬虫教程
- Python 网络爬虫 - 首页
- 介绍
- Python 入门
- Python 网络爬虫模块
- 网络爬虫的合法性
- 数据提取
- 数据处理
- 处理图像和视频
- 文本处理
- 抓取动态网站
- 抓取基于表单的网站
- 处理验证码
- 使用爬虫进行测试
- Python 网络爬虫资源
- Python 网络爬虫 - 快速指南
- Python 网络爬虫 - 资源
- Python 网络爬虫 - 讨论
Python 网络爬虫 - 基于表单的网站
在上一章中,我们学习了抓取动态网站。本章让我们了解如何抓取基于用户输入的网站,也就是基于表单的网站。
介绍
如今,万维网 (WWW) 正朝着社交媒体和用户生成内容的方向发展。所以问题来了,我们如何访问登录屏幕之外的信息呢?为此,我们需要处理表单和登录。
在之前的章节中,我们使用 HTTP GET 方法请求信息,但在本章中,我们将使用 HTTP POST 方法将信息推送到 Web 服务器进行存储和分析。
与登录表单交互
在使用互联网的过程中,您一定多次与登录表单交互过。它们可能非常简单,只包含很少的 HTML 字段、一个提交按钮和一个操作页面;也可能很复杂,包含一些额外的字段,例如电子邮件、留言以及出于安全原因的验证码。
在本节中,我们将使用 Python 的 requests 库来处理一个简单的提交表单。
首先,我们需要导入 requests 库,如下所示:
import requests
现在,我们需要为登录表单的字段提供信息。
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
在下一行代码中,我们需要提供表单操作将要发生的 URL。
r = requests.post(“enter the URL”, data = parameters) print(r.text)
运行脚本后,它将返回操作发生页面上的内容。
假设您想向表单提交任何图像,使用 requests.post() 也很容易。您可以通过以下 Python 脚本了解它:
import requests file = {‘Uploadfile’: open(’C:\Usres\desktop\123.png’,‘rb’)} r = requests.post(“enter the URL”, files = file) print(r.text)
从 Web 服务器加载 Cookie
Cookie,有时也称为 Web Cookie 或 Internet Cookie,是由网站发送的一小段数据,我们的计算机将其存储在我们 Web 浏览器内的文件中。
在处理登录表单的上下文中,Cookie 可以分为两种类型。一种是我们在上节中处理过的,它允许我们向网站提交信息;另一种允许我们在访问网站期间始终保持“登录”状态。对于第二种类型的表单,网站使用 Cookie 来跟踪谁已登录,谁未登录。
Cookie 的作用是什么?
如今,大多数网站都使用 Cookie 进行跟踪。我们可以通过以下步骤了解 Cookie 的工作原理:
步骤 1 - 首先,网站将验证我们的登录凭据并将其存储在我们的浏览器 Cookie 中。此 Cookie 通常包含服务器生成的令牌、超时和跟踪信息。
步骤 2 - 接下来,网站将使用 Cookie 作为身份验证的证明。每次访问网站时,都会显示此身份验证。
Cookie 对 Web 爬虫来说非常棘手,因为如果 Web 爬虫不跟踪 Cookie,提交的表单将被送回,并且在下一页上,它似乎从未登录过。使用 Python 的 requests 库很容易跟踪 Cookie,如下所示:
import requests parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’} r = requests.post(“enter the URL”, data = parameters)
在上面的代码行中,URL 将是充当登录表单处理程序的页面。
print(‘The cookie is:’) print(r.cookies.get_dict()) print(r.text)
运行上述脚本后,我们将从上次请求的结果中检索 Cookie。
Cookie 还有一个问题,就是有时网站会在没有任何警告的情况下频繁修改 Cookie。可以使用 requests.Session() 来处理这种情况,如下所示:
import requests session = requests.Session() parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’} r = session.post(“enter the URL”, data = parameters)
在上面的代码行中,URL 将是充当登录表单处理程序的页面。
print(‘The cookie is:’) print(r.cookies.get_dict()) print(r.text)
请注意,您可以轻松理解使用会话和不使用会话的脚本之间的区别。
使用 Python 自动化表单
在本节中,我们将介绍一个名为 Mechanize 的 Python 模块,它将减少我们的工作量并自动化填写表单的过程。
Mechanize 模块
Mechanize 模块为我们提供了一个高级接口来与表单交互。在开始使用它之前,我们需要使用以下命令安装它:
pip install mechanize
请注意,它仅适用于 Python 2.x。
示例
在此示例中,我们将自动化填写一个包含两个字段(电子邮件和密码)的登录表单的过程:
import mechanize brwsr = mechanize.Browser() brwsr.open(Enter the URL of login) brwsr.select_form(nr = 0) brwsr['email'] = ‘Enter email’ brwsr['password'] = ‘Enter password’ response = brwsr.submit() brwsr.submit()
上面的代码很容易理解。首先,我们导入了 mechanize 模块。然后创建了一个 Mechanize 浏览器对象。然后,我们导航到登录 URL 并选择表单。之后,名称和值直接传递给浏览器对象。