Python Web Scraping - 基于表单的网站

在上一章中,我们看到了抓取动态网站.在本章中,让我们了解一下基于用户输入的网站,即基于表单的网站.

简介

这些天WWW(万维网(World Wide Web)正朝着社交媒体和使用过的内容发展.那么问题是我们如何能够访问超出登录屏幕的此类信息?为此,我们需要处理表单和登录.

在前面的章节中,我们使用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(有时称为网络Cookie或互联网Cookie)是一小块从网站发送的数据和我们的计算机将其存储在我们网络浏览器内的文件中.

在与登录表单交易的情况下,cookie可以有两种类型.其中一个是我们在上一节中处理的,它允许我们向网站提交信息,其次是让我们在访问网站期间保持永久"登录"状态.对于第二种表单,网站使用cookie来跟踪谁登录和谁不登录.

cookie做什么?

目前,大多数网站都使用cookie进行跟踪.我们可以通过以下步骤和减号来理解cookie的工作;

步骤1 : 首先,该站点将验证我们的登录凭据并将其存储在我们的浏览器cookie中.此cookie通常包含服务器生成的转发,超时和跟踪信息.

第2步 : 接下来,该网站将使用cookie作为身份验证的证明.每当我们访问网站时,都会显示此身份验证.

Cookie对于网络抓取工具非常有问题,因为如果网络抓取工具无法跟踪Cookie,则会将提交的表单发送回下一页似乎他们从未登录过.在Python 请求库的帮助下很容易跟踪cookie,如下图所示 :

 
导入请求
参数= {'姓名':'输入您的姓名','电子邮件ID':'您的电子邮件ID','留言':'在此输入您的留言'} 
r = requests.post("输入网址",数据=参数)

在上面的代码行中,URL将是页面它将作为登录表单的处理器.

 
 print('the cookie is:')
 print(r.cookies) .get_dict())
 print(r.text)

运行上述脚本后,我们将从上次请求的结果中检索cookie uest.

Cookie存在另一个问题,有时网站经常会在没有警告的情况下修改Cookie.这种情况可以通过 requests.Session()处理如下 :

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)

观察您可以很容易地理解脚本与会话和没有会话之间的区别.

使用Python自动化表单

在本节中,我们将讨论一个名为Mechanize的Python模块,它将减少我们的工作并自动完成填写表单的过程.

机械化模块

Mec hanize模块为我们提供了与表单交互的高级接口.在开始使用它之前,我们需要使用以下命令安装它 :

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