文章采集api(Python标准库之外的第三方库(一)库工具)

优采云 发布时间: 2022-01-12 17:00

  文章采集api(Python标准库之外的第三方库(一)库工具)

  上一期我们讲解了数据归一化的相关内容。首先对词的频率进行排序,然后转换一些大小写以减少 2-gram 序列的重复内容。

  当我们真正走出网络数据基础采集的大门时,我们可能会遇到的第一个问题是:“如何获取登录窗口背后的信息?” 如今,网络正朝着页面交互、社交网络媒体、用户生成内容的趋势不断发展。表单和登录窗口是许多 网站 的组成部分。但是,这些都相对容易处理。

  到目前为止,在前面的示例中,当网络爬虫与大多数 网站 服务器交互时,它们使用 HTTP 协议的 GET 方法来请求信息。在本文文章中,我们重点介绍POST方法,它将信息推送到Web服务器进行存储和分析。

  页面表单基本上可以看成是用户提交POST请求的一种方式,但是这种请求方式是被服务器理解和使用的。正如 网站 URL 链接帮助用户发出 GET 请求一样,HTML 表单帮助用户发出 POST 请求。当然,我们也可以用一点点麻麻自己创建这些请求,然后通过网络爬虫提交给服务器。

  Python 请求库

  虽然可以使用 Python 标准库控制 Web 表单,但有时一点语法糖可以让生活更甜蜜。但是当你想要做的不仅仅是 urllib 可以做的基本 GET 请求时,请查看 Python 标准库之外的第三方库。

  Requests库就是这样一个Python第三方库,擅长处理复杂的HTTP请求、cookies、headers(响应头和请求头)等。

  以下是 Requests 创建者 Kenneth Retiz 对 Python 标准库工具的评价:

  Python 标准库 urllib2 为您提供了大部分 HTTP 功能,但它的 API 很差。这是因为它是多年来一步步建立起来的——不同的时代要面对不同的网络环境。所以为了完成最简单的任务,他需要花费大量的工作(甚至写完整的方法)。

  事情不应该这么复杂,也不应该发生在 Python 中。

  与任何第三方 Python 库一样,Requests 库也可以与其他第三方 Python 库管理器(例如 pip)一起安装,或者直接下载 Requests 库源代码。

  提交基本表格

  大多数 Web 表单由一些 HTML 字段、一个提交按钮和一个“结果”(表单操作的值)页面组成,该页面在表单处理完毕后跳转。虽然这些 HTML 字段通常由文本内容组成,但也可以实现文件上传或其他非文本内容。

  因为大部分主流网站都会在他们的robots.txt文件中注明禁止爬虫访问登录表单,相关介绍可以参考这篇文章:爬虫系列:爬虫带来的道德风险和法律责任。

  例如,这里是一个表单的源代码:

  

用户名

密码

  这里有几点需要注意:首先,两个输入字段命名为 username 和 passwd 很重要。字段的名称决定了表单验证后将发送到服务器的变量名称。如果你想模拟从表单提交数据的行为,你需要确保你的变量名与字段名相对应。

  还要求表单的实际行为实际发生在 index.php?c=session&a=login 中。对表单的任何 POST 请求实际上都发生在此页面上,而不是表单本身所在的页面上。请记住:HTML 表单的目的只是为了帮助 网站 的访问者向服务器发送格式正确的请求以获取未出现的页面。除非您正在研究请求的设计风格,否则不要在表单所在的页面上花费太多时间。

  使用 Requests 库提交表单只需几行代码即可完成,包括导入库文件和打印内容的语句:

  import requests

params = {'username': 'admin', 'passwd': '5e_KR&pXJ9=J(c7d9P-twt9:'}

r = requests.post("http://www.test.com/admin/index.php?c=session&a=login", data=params)

print(r.text)

  表单提交后,程序返回执行页面的源码,如下:

  

您的浏览器不支持框架!

  由于我们通过Requests提交了内容,并没有在浏览器中提交,所以会出现上面的提示,但是我们已经登录成功了。后面我们需要用到浏览器采集的内容时,我们会详细介绍这部分。

  这边的代码可以处理很多简单的表格。以下是邮件订阅的表单代码,如下:

  

Marketing

Email Address

  虽然第一次看到有点吓人,但大多数情况下我们只需要关注两件事:

  单选按钮、复选按钮和其他输入

  显然,并非所有页面都只是一堆文本字段和一个提交按钮。HTML 标准提供了大量可用的表单字段:单选按钮、复选按钮、下拉选项等。在 HTML5 中,还有其他控件,如滚动条(范围输入字段)、邮箱、日期等。自定义 Javascript 字段是无所不能的,实现了颜色选择器、日历以及开发人员能想到的任何东西。

  无论表单的字段看起来多么复杂,仍然只有两件事需要关心:字段名称和值。字段名可以通过查看源码,查找name属性轻松获取。字段值有时比较复杂,可能在表单提交之前由Javascript生成。颜色选择器是一个奇怪的表单字段,它可能使用像 #f5c26b 这样的值。

  如果您不确定输入字段值的数据格式,有一些工具可以跟踪浏览器通过 网站 发出或接收的 GET 和 POST 请求的内容。如前所述,跟踪 GET 请求的最佳和最直接的方法是查看 网站 URL 链接,如果 URL 链接如下所示:

  https://pdf-lib.org/Home/SearchResult?Keyword=zabbix

  那么请求的表单可能如下所示:

  下面是一个更复杂的表单提交示例:

  

  如果您遇到一个看起来很复杂的 POST 表单,并且看起来浏览器正在将这些参数传递给服务器,那么最简单的方法是使用 Chrome 的检查器或开发人员工具。

  总结

  由于篇幅原因,今天只讲解基本的表单、单选按钮、复选框等表单输入,以及如何通过Requests提交给服务器。

  在下一篇文章 文章 中,我们将介绍提交文件、图像、处理登录、cookie、HTTP 基本访问身份验证以及其他与表单相关的问题。

  源代码已托管在 Github 上:

  如果您有任何问题,欢迎提出。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线