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 并选择表单。之后,名称和值直接传递给浏览器对象。

广告