Python - 网页抓取基于表单的网站

  • 简述

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

    如今,WWW(万维网)正朝着社交媒体和用户生成内容的方向发展。那么问题来了,我们如何才能访问登录屏幕之外的此类信息?为此,我们需要处理表单和登录。
    在前面的章节中,我们使用 HTTP GET 方法来请求信息,但在本章中,我们将使用 HTTP POST 方法将信息推送到 Web 服务器进行存储和分析。
  • 与登录表单交互

    在 Internet 上工作时,您必须与登录表单进行过多次交互。它们可能非常简单,例如只包含很少的 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 的工作原理 -
    Step 1− 首先,该站点将验证我们的登录凭据并将其存储在我们浏览器的 cookie 中。此 cookie 通常包含服务器生成的令牌、超时和跟踪信息。
    Step 2− 接下来,网站将使用 cookie 作为身份验证的证明。每当我们访问该网站时,始终会显示此身份验证。
    Cookie 对于网络爬虫来说是非常有问题的,因为如果网络爬虫不跟踪 cookie,提交的表单会被发回,并且在下一页似乎他们从未登录过。借助Pythonrequests库,如下所示 -
    
    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 并选择表单。之后,名称和值直接传递给浏览器对象。