6.用python写网络爬虫,表单交互

这篇具有很好参考价值的文章主要介绍了6.用python写网络爬虫,表单交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    在前面几章中,我们下载的静态网页总是返回相同的内容。而在本章中,我们将与网页进行交互 根据用户输入返回对应的内容。本章将包含如下几个主题:
    发送 POST 请求提交表单:
    使用 cookie 登录网站:
    用于简化表单提交的高级模块Mechanize。
6.用python写网络爬虫,表单交互

 

    想要和表单进行交互,就需要拥有可以登录网站的用户账号。现在我们需要手工注册账号,其 网址为http://example.webscraping.com/user/register。本章目前还无法自动化注册表单,不过在下一章我们会介绍处理验证码问题的方法,从而实现自动化表单注册。  

6.1登录表单

    我们最先要实施 自 动化提交的 是登录表单 , 其网址为 http : / / exampl e . webscraping . com/user/ l ogin o 要想理解该表单 , 我们需要用 到 Firebug Lite 。 如果使用完整版的 Firebug 或者 Chrome 的 开发者工具 , 我们只需要提 交表单就可 以在 网 络选项卡 中检查传输的 数据 。 但是 , Lite 版本 限制我们只 能查看结构 ,如下图所示
    6.用python写网络爬虫,表单交互
     上图中包括几个重要组成部分,分别是form标签的action...enctype 和method属性,以及两个 input域。action属性用于设置表单数据提交的地址,本例中为#,也就是和登录表单相同的URL。 enctype属性用于设置数据提交的编码,本例中为 application/x-www- form-urlencoded。而me thod 属性被设为 post,表示通过请求体向服务器端提交表单数据。对于input标签,重要的属性是 name,用于设定提交到服务器端时某个域的名称。
6.用python写网络爬虫,表单交互

 

    当普通用户通过浏览器打开该网页时,需要输入邮箱和密码,然后单击登录按钮将数据提交到服务端。如果登录成功,则会跳转到主页:否则,会跳转回登录页。下面是尝试自动化处理该流程的初始版本代码。
6.用python写网络爬虫,表单交互
    上述代码中,我们设置了邮箱和密码域,并将其进行了urlencode编码,然后将这些数据提交到 服务器端。当执行最后的打印语句时,输出的依然是登录页的U阻,也就是说登录失败了。
这是因 为登录表单十分严格 , 除 邮箱和密码外 , 还需要提交另外几个域。
    我们可以从图①的最下方找到这几个域不过由于设置为 hidden,所以不会在浏览器中显示出来。为了访问这些隐藏域,下面使用第2章中介绍的工xml库编写一个函数,提取表单中所有input 标签的详情。
6.用python写网络爬虫,表单交互
    上述代码使用 lxml 的 css 选择器遍历表单中所有的妇 put 标签,然后以字典的形式返回其中的 name和value属性。对登录页运行该函数后,得到的结果如下所示。

 6.用python写网络爬虫,表单交互

其 中,_f ormkey属性是这里的关键部分,服务器端使用这个唯一的ID来避免表单多次提交。每次加载网页时,都会产生不同的ID,然后服务器端 就可以通过这个给定的ID来判断表单是否己经提 交过。下面是提交了_formkey及其他隐藏域的新版本登录代码。
6.用python写网络爬虫,表单交互

 

    很遗憾,这个版本依然不能正常工作,运行时还是会打印出登录URL。这是因为我们缺失了一个重要的组成部分一一 cookie。当普通用户加载登录表单时_formkey的值将会保存在cookie中,然后该值会与提交的登录表单数据中的_formkey值进行对比。下面是使用urllib2.HTTPCookie Process or 类增加了cookie支持之后的代码。

6.用python写网络爬虫,表单交互

6.用python写网络爬虫,表单交互 

    这次我们终于成功了!服务器端接受了我们提交的表单值,response的U也 是主页。该代码片段以及本章中其他登录示例代码都可以从https : //bitbucket.org/wswp/code/src/tip/chapter06/login.py 获取。

6.1.1从浏览器加载cookie

    从前面的例子可以看出,如何向服务器提交它所需的登录信息,有时候会很复杂。幸好,对于这种麻烦的网站还有一个变通方法,即先在浏览器中手工执行登录,然后在Python脚本中复用之前得 到的cookie,从而实现自动登录。不同浏览器采用不同的格式存储 cookie ,这里我们仅以Firefox 浏览器为例。
    Firefox在sqlite数据库中存储cookie,在JSON文件中存储session,这两种存储方式都可以直接通过Python获取。对于登录操作来说,我们只需要获取session,其存储结构如下所示。

6.用python写网络爬虫,表单交互

    下面是把 session 解析到 Cookie Ja r 对象的函数代码 。 

6.用python写网络爬虫,表单交互

 6.用python写网络爬虫,表单交互

    这里有一个比较麻烦的地方:不同的操作系统中,Firef ox存储session文件的位置不同。在 Linux 系统中,其路径如下所示。
    ~I.mozilla/firefox/*.default/se.ssionstore.js
    在OSX中,其路径如下所示。
    ~/Library/ApplicationSupport/Firefox/Profiles/*.default/sessionstore.js
    而在WindowsVista及以上版本系统中,其路径如下所示。
%APPDATA%/Roaming/Mozilla/Firefox/Profiles/*.default/sessionstore.js
    下面是返回session文件路径的辅助函数代码。
6.用python写网络爬虫,表单交互

 

    需要注意的是,这里使用的glob模块会返回指定路径中所有匹配的文件。下面是修改后使用浏览器cookie登录的代码片段。
6.用python写网络爬虫,表单交互
    要检查session是否加载成功这次我们无法再依靠登录跳转了这时我们需要抓取产生的 HTML, 检查是否存在登录用户标签。如果得到的结果是Login,则说明session没能正确加载。如果出现这种情况,你就需要确认一下Firefox中是否已经成功登录示例网站。如下图所示为Firebug中显示的用户标签结构。
6.用python写网络爬虫,表单交互 
Firebug中显示该标签位于ID为“navbar”的<ul>标签中我们可以使用第2章中介绍的lxml库抽取其 中的信息 。
>>> tree = lxml.html . fromstring (html)
>>> tree . cssselect (’ul#navbar li a’) [O] . text_conte口t () 
Welcome Test account
    本节中的代码非常复杂,而且只支持从Firefox浏览器中加载session。如果你想支持其他浏览器的 cookie,可以使用browsercookie模块。该模块可以通过pip install browsercookie 命令进行安装,其文档地址为https://pypi.python.org/pypi/browsercookie。

6.2 支持内容更新的登录脚本扩展

    自动化登录成功运行后,我们还可以继续扩展该脚本,使其与网站进行交互,更新国家数据。 本节中使用的代码可以从https://bitbucket.org/wswp/code/src/t ip/chapter06/edit.py获取。如下图 所示,每个国家页面底部均有 Edit 链接。
6.用python写网络爬虫,表单交互
    在登录情况下,该链接会指向另一个页面,在该页面中所有国家属性都可以进行编辑,如下图 所示。
6.用python写网络爬虫,表单交互
    这里我们编写一个脚本,每次运行时都会使该国家的人口数量加1。首先是复用parseform( ) 函数,抽取国家人口数量的当前值。

 6.用python写网络爬虫,表单交互

 6.用python写网络爬虫,表单交互

         然后为人口数量加1,并将更新提交到服务器端。
6.用python写网络爬虫,表单交互 

 

    当我们再次回到国家页时,可以看到人口数量己经增长到62,348,448,如图
6.用python写网络爬虫,表单交互
    读者可以对任何字段随意进行修改和测试,因为网站所用的数据库每个小时都会将国家数据恢复为初始值,以保证数据正常。本节中使用的代码可以从https://bitbucket.org/wswp/code/ src/tip/chapter06/edit.py获取。需要注意的是,严格来说,本例并不算是网络爬虫,而是广义上的 网络机器人。不过,这里使用的表单技术可以应用于抓取时的复杂表单交互当中。

6.3 使用Mechanize模块实现自动化表单处理

    尽管我们的例子现在已经可以正常运行,但是可以发现每个表单都需要大量的工作 和测试。我们可以使用Mechanize模块减轻这方面的工作,该模块提供了与表单交互的高级接口。Mechanize 可 以通过 pip 命令进行安装。
         pip install mechanize
    下面是使用Mechanize 实现前面的人数量增长示例的代码。

 

6.用python写网络爬虫,表单交互
    这段代码比之前的例子要简单得多,因为我们不再需要管理 cookie,而且访问表单输入框也更加容易。该脚本首先创建一个 Mechanize 浏览器对象,然后定位到登录 URL,选择登录表单我们可以直接向浏览器对象传递名称和值,来设置选定表单的输入框内容。调试时,我们可以直接调用 br.form,获取提交之前的表单状态,如下面的代码所示。
6.用python写网络爬虫,表单交互 
    设定好登录表单的参数之后,调用br.submit( )提交选定的登录表单,然后脚本就处于登录态 了。现在,定位到国家的编辑页面,继续使用表单界面增加人口数量。需要注意的是,人口数量的输入框需要字符串类型的值,否则Mechanize会抛出TypeError异常。
    要检查上面的代码是否运行成功,可以使用 Mechanize 返回到国家表单,查询当前的人口数量 如下所示。
6.用python写网络爬虫,表单交互

    和预期一样,人口数量再次增加,现在是62,348,449。  文章来源地址https://www.toymoban.com/news/detail-512770.html

6.用python写网络爬虫,表单交互

6.4 本章小结 

    在抓取网页时,和表单进行交互是一个非常重要的技能。本章介绍了两种交互方法:第一种是分析表单,然后手工生成期望的 POST请求:第二种则是直接使用高级模块Mechanize。
        

到了这里,关于6.用python写网络爬虫,表单交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在网络爬虫中解决CAPTCHA?使用Python进行网络爬虫

    网络爬虫是从网站提取数据的重要方法。然而,在进行网络爬虫时,常常会遇到一个障碍,那就是CAPTCHA(全自动公共图灵测试以区分计算机和人类)。本文将介绍在网络爬虫中解决CAPTCHA的最佳方法,并重点介绍CapSolver无缝集成。 网络爬虫中的CAPTCHA是指在从网站提取数据时遇

    2024年01月22日
    浏览(58)
  • 快速实现前后端表单交互(minui)

    (1)使用minui快速生成表单 (2)修改样式,将生成的html文件发送给后端 (3)前后端交互(后端如何处理不太清楚) 表单初始化:新增+修改(包括查看) 根据是否有id来选择发送什么请求:getCheckSheetHtml请求表示获取最原始的无数据的表单,getCheckContent表示获取有数据的表

    2024年02月03日
    浏览(36)
  • Python 笔记02 (网络交互 TCP/UDP)

    TCP(传输控制协议)和UDP(用户数据报协议)是两种 常见的互联网传输协议 ,它们之间有很多区别,包括以下几个主要方面: TCP是传输控制协议,是面向连接的通讯协议(如:打电话),通过 三次握手建立连接 ,通讯完成时四次挥手,一般应用在对安全性、完整性有严格

    2024年02月07日
    浏览(30)
  • 01 Python 网络爬虫:爬虫技术的核心原理

    不夸张地说,现在哪怕是初中生,只要花点儿时间、精力稍微按「网络爬虫」的开发步骤学习了解一下,也能把它玩得贼溜。 听起来感觉是很高大上的东西,但实际上并不复杂,也就是使用了某种编程语言按照一定步骤、规则主动通过互联网来抓取某些特定信息的代码程序。

    2024年02月12日
    浏览(49)
  • 【Python爬虫】网络爬虫:信息获取与合规应用

    网络爬虫,又称网络爬虫、网络蜘蛛、网络机器人等,是一种按照一定的规则自动地获取万维网信息的程序或者脚本。它可以根据一定的策略自动地浏览万维网,并将浏览到的有用信息进行提取、解析和存储。网络爬虫在互联网发展早期就已经出现,并随着互联网的不断发展

    2024年04月14日
    浏览(38)
  • 安全基础 --- 编码(02)+ form表单实现交互

    (1)php 用php文件接收 运行结果: (2)nodejs 我们使用linux虚拟机实现交互:创建新目录,使用 npm init 创建 package.json 包 下载express库 修改package.json包 web-express目录下创建web-express.js文件 直接运行web-express.js文件 web界面运行form表单与nodejs交互 (3)python 下载Flask模块 创建 12

    2024年02月14日
    浏览(36)
  • 浅谈Python网络爬虫应对反爬虫的技术对抗

    在当今信息时代,数据是非常宝贵的资源。而作为一名专业的 Python 网络爬虫程序猿,在进行网页数据采集时经常会遭遇到各种针对爬虫行为的阻碍和限制,这就需要我们掌握一些应对反爬机制的技术手段。本文将从不同层面介绍如何使用 Python 进行网络爬虫,并提供相应解决

    2024年02月11日
    浏览(33)
  • 网络爬虫(Python:Selenium、Scrapy框架;爬虫与反爬虫笔记)

    Selenium是一个模拟浏览器浏览网页的工具,主要用于测试网站的自动化测试工具。 Selenium需要安装浏览器驱动,才能调用浏览器进行自动爬取或自动化测试,常见的包括Chrome、Firefox、IE、PhantomJS等浏览器。 注意:驱动下载解压后,置于Python的安装目录下;然后将Python的安装目

    2024年01月18日
    浏览(64)
  • Python网络通信-python爬虫基础

    1.1、安装requests模块 打开pycharm 安装成功会提示successfully 1.2、发送GET请求 简单请求(以京东举例) 运行结果 添加请求头(以百度举例) 为什么要添加请求头呢,因为有些网页在你请求的时候会检查你是否有请求头,如果没有请求头,就不会返回正常的内容,下面我来验证

    2024年01月24日
    浏览(47)
  • 快速上手Python爬虫:网络爬虫基础介绍及示例代码

    网络爬虫,又称为 Web 爬虫、网络蜘蛛、网络机器人,在英文中被称为 web crawler,是一种自动化程序,能够在互联网上自动获取数据、抓取信息,并将其存储在本地或远程数据库中。它可以帮助我们自动化处理大量数据,提高工作效率,更好地利用互联网资源。 现代互联网上

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包