- Python 网页抓取教程
- Python 网页抓取 - 主页
- 介绍
- Python 入门
- 用于网页抓取的 Python 模块
- 网页抓取的合法性
- 数据提取
- 数据处理
- 处理图像和视频
- 处理文本
- 抓取动态网站
- 抓取基于表单的网站
- 处理验证码
- 使用刮刀进行测试
- Python 网页抓取资源
- Python 网页抓取 - 快速指南
- Python 网页抓取 - 资源
- Python 网页抓取 - 讨论
Python 网页抓取 - 基于表单的网站
在上一章中,我们已经看到了抓取动态网站。在本章中,让我们了解基于用户输入的网站(即基于表单的网站)的抓取。
介绍
如今,WWW(万维网)正在向社交媒体和用户生成内容发展。那么问题来了,我们如何访问登录屏幕之外的此类信息?为此,我们需要处理表单和登录。
在前面的章节中,我们使用 HTTP GET 方法来请求信息,但在本章中,我们将使用 HTTP POST 方法将信息推送到 Web 服务器进行存储和分析。
与登录表单交互
在互联网上工作时,您一定与登录表单进行过多次交互。它们可能非常简单,例如仅包含很少的 HTML 字段、一个提交按钮和一个操作页面,或者它们可能很复杂,并且具有一些附加字段,例如电子邮件、出于安全原因留下消息以及验证码。
在本节中,我们将借助 Python 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,有时称为网络 Cookie 或互联网 Cookie,是从网站发送的一小段数据,我们的计算机将其存储在网络浏览器内的文件中。
在处理登录表单时,cookie 可以有两种类型。第一,我们在上一节中讨论过,它允许我们向网站提交信息;第二,它允许我们在访问网站的整个过程中保持永久的“登录”状态。对于第二种形式,网站使用 cookie 来跟踪谁已登录以及谁未登录。
cookie 有什么作用?
如今,大多数网站都使用 cookie 进行跟踪。我们可以通过以下步骤了解 cookie 的工作原理 -
步骤 1 - 首先,该网站将验证我们的登录凭据并将其存储在我们浏览器的 cookie 中。该 cookie 通常包含服务器生成的令牌、超时和跟踪信息。
步骤 2 - 接下来,网站将使用 cookie 作为身份验证证明。每当我们访问该网站时,总会显示此身份验证。
Cookie 对于网络抓取工具来说是一个很大的问题,因为如果网络抓取工具不跟踪 Cookie,则提交的表单会被发回,并且在下一页上看起来他们从未登录过。借助以下工具跟踪 Cookie 非常容易Python requests库,如下所示 -
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 模块为我们提供了一个与表单交互的高级接口。在开始使用它之前,我们需要使用以下命令安装它 -
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 并选择表单。之后,名称和值将直接传递给浏览器对象。