在这篇文章中,我们将介绍Python提供的几乎所有的网络数据采集工具,你可以将本文看作是我们的《终极网络数据采集指南》的系列文章。我们将从最基本的工具到最先进的工具进行介绍,并将涵盖每一个的利弊。当然,我们并不能涵盖我们讨论的每个工具的所有方面,但是这篇文章应该足以让你了解哪些工具可以做什么,以及何时使用哪些工具。
注意:当我在这篇博客文章中谈论Python时,你应该假设我谈论的是Python。
0)网络基础知识互联网是非常复杂的:在浏览器中查看一个简单的网页涉及到许多底层技术和概念。我并不打算解释所有的东西,但是为了从网络中提取数据,我将向你展示一些你必须理解的最重要的东西。
超文本传输协议(HTTP)HTTP使用一个客户机/服务器模型,其中一个HTTP客户机(浏览器、你的Python程序、curl和Rqusts等)打开一个连接并向一个HTTP服务器(Nginx和Apach等)发送一条消息(“我想看那个页面:/product”)。
然后,该服务器使用一个响应(例如HTML代码)进行回答并关闭连接。HTTP被称为无状态协议,因为每个事务(请求/响应)都是独立的。例如,FTP是有状态协议。
基本上,当你在浏览器中输入一个网址时,HTTP请求看起来是这样的:
在这个请求的第一行,你可以看到很多东西:
这里使用了GET动词或方法,这表示我们是从特定的路径(:/product/)请求数据的。还有其他的HTTP动词,你可以在这里看到完整的列表。
HTTP协议的版本,在本教程中我们将专注HTTP1.
多个标头字段
以下是最重要的标头字段:
Host:服务器的域名,如果没有指定端口号,则默认为80。
Usr-Agnt:包含客户端发起的请求的信息,包括操作系统信息。在本例中,它是我的OSX系统上的网络浏览器(Chrom)。这个标头很重要,因为它要被用于统计(有多少用户访问了我的手机网站或桌面网站)或用于防止任何来自机器人的违规行为。因为这些标头是由客户端发送的,所以可以对它进行修改(称为“标头欺骗”),这正是我们使用scrapr所要做的——使scrapr看起来像一个普通的网络浏览器。
Accpt:可接受的作为响应的内容类型。有很多不同的内容类型和子类型:txt/plain、txt/html、imag/jpg和application/json等。
Cooki:nam1=valu1;nam=valu...,此标头字段包含一个名称-值对列表。它被称为会话cookis,用于存储数据。Cookis是网站用来验证用户身份,和/或在你的浏览器中存储数据的工具。例如,当你填写了一个登录表单时,服务器将检查你输入的凭据是否正确,如果正确,它将进行重定向并将一个会话cooki注入你的浏览器。然后,你的浏览器会将此cooki与随后的每个请求一起发送到该服务器。
Rfrrr:Rfrrr标头包含跳转到实际URL页面的源URL地址。这个标头很重要,因为网站使用这个标头来根据用户来源来改变自身的行为。例如,许多新闻网站都有付费订阅,你只能浏览文章的10%,但如果用户来自像Rddit这样的新闻聚合器,网站就会让你浏览全部内容。它们使用rfrrr来检查这个。有时,我们将不得不欺骗这个标头来获得我们想要提取的内容。