📜  Python Web爬网-基于表单的网站

📅  最后修改于: 2020-11-07 08:05:15             🧑  作者: Mango


在上一章中,我们已经看到了抓取动态网站。在本章中,让我们了解对基于用户输入的网站(即基于表单的网站)的抓取。

介绍

如今,WWW(万维网)正朝着社交媒体以及用户生成的内容发展。因此,出现了一个问题,我们如何才能访问登录屏幕之外的此类信息?为此,我们需要处理表单和登录名。

在前几章中,我们使用HTTP GET方法来请求信息,但是在本章中,我们将使用HTTP POST方法将信息推送到Web服务器进行存储和分析。

与登录表单交互

在Internet上工作时,您必须与登录表单进行多次交互。它们可能非常简单,例如仅包含几个HTML字段,一个提交按钮和一个操作页面,或者它们可能很复杂,并且具有一些其他字段(如电子邮件),出于安全原因将消息与验证码一起保留。

在本节中,我们将借助Python请求库处理一个简单的提交表单。

首先,我们需要导入请求库,如下所示:

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作为身份验证的证明。每当我们访问网站时,始终显示此身份验证。

Cookies对于网络刮板来说是非常成问题的,因为如果网络刮板不跟踪cookie,则会将提交的表单发送回去,并且在下一页似乎它们从未登录过。通过以下方法非常容易跟踪cookie: Python请求库,如下所示-

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而不会发出警告。这种情况可以通过request.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模块,该模块将减少我们的工作并自动化填写表单的过程。

机械化模块

机械化模块为我们提供了与表单进行交互的高级界面。在开始使用它之前,我们需要使用以下命令安装它-

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浏览器对象。然后,我们导航到登录URL并选择表单。之后,名称和值将直接传递到浏览器对象。