网页爬取对于任何企业来说都是一个非常强大的工具。它允许从互联网上大规模收集数据以提取有价值的见解:产品和定价信息、竞争对手的行为、消费者情绪、业务线索等等。本指南将全面概述什么是网络爬取、它是如何工作的以及你可以用它做什么。让我们开始吧!
什么是网页爬取 – 定义
网络爬取是指从网络收集数据的过程。通常,它是使用网络爬取软件或定制的网络爬取工具自动完成的。但该术语还包括手动网络爬取——手动复制粘贴信息。
网络爬取有各种名称。它也可以称为网络收获、网络数据提取、屏幕爬取或数据挖掘。这些术语之间存在一些细微的差异,但它们或多或少可以互换使用。
网页爬取与 API
网页爬取并不是从网站获取数据的唯一方法。它甚至不是默认的。首选方法是使用 API。
API 或应用程序编程接口是以编程方式与某个网站或应用程序交互的规则。像 reddit.com 这样的网站有允许任何人下载其内容的 API。
API 的问题在于并非所有网站都有它们。那些经常强加您可以收集哪些数据以及多久收集一次的数据。出于某种原因,API 甚至比某些网络爬取脚本更容易更改或中断。
因此,Web 爬取与 API 之间的主要区别在于前者提供了更好的数据访问权限:无论您在浏览器中看到什么,都可以获得。但是,网络爬取经常发生在网站不知道的情况下。当他们确实发现时,他们对此并不十分高兴。
网络爬虫和网络爬取
术语网络爬虫和网络爬取出现在类似的上下文中,因此您可能会发现它们之间的关系不清楚。好吧,它们并不完全相同。
网络爬虫遍历网站上的链接,不加选择地下载它在途中遇到的所有内容:从 URL 结构到内容。网络爬虫最好的例子是谷歌搜索——它会不断地爬取整个互联网,以根据调查结果制作可搜索的索引。
网络爬取意味着您正在从网站下载和提取特定数据。根据您的需要,它可以是计算机显示器、职位或其他东西的价格。
从技术上讲,网络爬取可以被视为更广泛的网络爬取过程的一部分。毕竟,要爬取一些内容,你必须先找到它。但在文化上,爬取通常具有独立的身份,尤其是当讨论转向网络爬取的合法性时。
网页爬取的工作原理
网页爬取涉及连续完成的多个步骤:
- 确定您的目标网站和您需要的数据。例如,这可能是亚马逊上 iPhone 的定价信息。
- 为您的项目量身定制一个名为 web scraper 的机器人。
- 以 HTML 格式提取数据。它可以像发出 GET 请求一样简单,也可以像处理表单和延迟加载 JavaScript 元素一样困难。
- 清理数据以供进一步使用。这个过程称为数据解析;它可以在刮削过程中或之后发生。最终结果是 .json 或其他可读格式的结构化数据。
- 根据需要调整您的网络刮刀。大型网站往往会经常变化,您可能会找到更有效的做事方式。
有许多工具可以促进爬取过程或减轻您的一些任务。现成的刮板让您避免自己建造;代理可以帮助你绕过阻塞;如果您愿意,您可以获得爬取服务来为您完成整个工作。
网页爬取有什么用?
网页爬取是一种获取数据的方法。无论您如何处理这些数据,都取决于您的需求和想象力。不用说,网络爬取的使用范围是巨大的。以下是一些在企业中比较受欢迎的:
- 搜集价格以获取最新的定价信息——价格刮包括建立一个价格刮板来持续监控电子商务网站。如果您想跟上竞争对手的步伐并与竞争对手竞争,了解最新的销售和定价调整(有时同时在多个地区)非常重要。网络爬取可确保您始终拥有新鲜的定价数据流。
- 聚合来自多个来源的数据——数据聚合公司一次爬取多个来源并比较他们的发现或为任务选择最佳来源。数据聚合本身可以是补充性的,也可以是整个业务模型。它在为许多航班聚合网站提供支持的旅游业中尤为普遍。
- 跟踪市场趋势和竞争对手的活动——通过爬取正确的网站,您可以在现场和场外跟踪竞争对手的动作。这不仅包括产品信息,还包括内容、公关文章、涉及比赛的新闻等。网络爬取还可以让您深入了解市场趋势——什么是热门以及事情的发展方向。
- 为销售和招聘生成潜在客户——另一个用例是爬取各种公开可用的资源,例如 YellowPages、LinkedIn 和职位发布,以寻找商业潜在客户。公司使用他们提取的数据来建立潜在员工和客户的复杂档案:姓名、职位、薪水、地点等。
- 保护品牌并监控其声誉——品牌保护需要跟踪整个网络上的产品和品牌提及;你必须寻找假冒和未经授权的用途。工作量很大,而且您无法真正手动完成。声誉监控也是如此——您必须观看社交媒体、评论网站、新闻文章、论坛和其他公共场所。因此,营销人员经常搜索 Instagram、Facebook、Reddit 和其他来源,以了解他们在线品牌的动态。
为工作选择最佳的网页爬取工具
市场上不乏网络爬取工具。如果您愿意,您甚至可以使用 Microsoft Excel 进行爬取。你应该吗?可能不是。因此,这里有一些比较流行的网页爬取工具,分为几类。
网页爬取框架
这些是完整的网络爬取工具集,涵盖了旅程的每个部分:爬取、解析,然后以您选择的格式存储数据。
- Scrapy – 用于复杂项目的成熟网络爬取和爬取框架。基于Python,可扩展,支持代理,数据解析,兼容其他Python库(如BeautifulSoup)。良好的文档,但对于初学者来说相对难以使用。没有开箱即用的 JavaScript 支持。
- Selenium – 一个主要为自动化测试而构建的框架。支持多种编程语言,如 C#、Java、Python 等。可以很好地处理 JavaScript,但比 Scrapy 更慢且可扩展性更差。最适合较小的网络爬取项目。
- Apify SDK – 一个用于爬取、爬取和解析 Web 数据的平台。称自己为 Javascript 的 Scrapy。非常可扩展(集成 Cheerio 和 Puppeteer),支持代理,并针对大规模和高性能爬取需求量身定制。提供广泛的文档、使用示例,甚至是现成的刮板。
网页爬取库
Web 爬取库是控制 Web 爬取过程的一个或多个方面的元素。它们本身通常是不够的,需要其他工具才能获得完整的体验。
- Beautiful Soup – 基于 Python 的解析器。流行且易于使用,但实际上需要其他库(如请求)从网络上爬取数据。
- Requests – 一个基于 Python 的 HTTP 库,用于下载数据。易于使用,具有会话持久性、SSL 验证、连接超时和代理支持等功能。
- lxml – 另一个基于 Python 的 HTTP 和 XML 解析器。与美汤相比,它的性能更好,但也更容易坏。也许是大型项目的更好选择。奇怪的是,lxml 包含一个对 Beautiful Soup 的回退,以防万一它无法提供结果。
- Cheerio – node.JS 的 XML 和 HTML 解析器。该库宣称自己快速、非常灵活,并以一种有意义的方式遵循熟悉的 qQuery 约定。
- Puppeteer – 用于控制无头 Chromium 浏览器的 node.JS API。在 Chromium 开发人员的支持下,它正在成为爬取大量 Javascript 网站的越来越流行的选择。
现成的网页爬取工具
这些就像网络爬取框架,但更简单——一切都已经为你配置好了,并包装在一个漂亮的用户界面中。下面的一些工具可以让你在没有任何编程知识的情况下成功爬取。然而,他们的视觉控制和对初学者的关注可能使他们不太适合严肃的项目。
- Octoparse – 适用于 Windows 和 macOS 的点击式爬取工具。处理 JavaScript,支持定时爬取、代理,并允许为不同的网站构建模板。包括一个没有请求限制但并发性非常有限的免费层。以 .json、.csv、.xls 和 HTML 格式导出数据。
- ParseHub – 另一个在许多方面类似于 Octoparse 的可视化网络爬虫。支持任务调度、多模板、IP轮换。每次运行的爬取页面数收费。以相同的格式导出。
- PhantomBuster – 为营销人员和其他对计算机不太友好的人提供的另一种无代码自动化工具。允许创建工作流,不仅可以爬取数据,还可以自动执行重复性任务:自动点赞帖子、发送消息等。在云端工作,以 CSV 和 JSON 格式导出。有趣的是,定价基于刮板运行时间。
松散的结构化数据
当我们谈论网络刮削时,我们通常是在谈论从一个HTML 文档–一个网页–中提取信息。在最基本的层面上,HTML只是一种标记语言(如超文本标记语言)。一个好的网站开发者使用HTML来提供文档的结构。文件,将某些元素标记为 “导航 “或 “产品 “或 “表格”。
<nav …
<div class=”product” …
<table id=”secret-information” …
你的电脑下载和渲染的网站只是包含信息和一堆标记的文本文件。如果你的浏览器能够将这些文本渲染成一个可用的网页,那么那就意味着HTML有一个基本的结构。如果页面上的所有 “产品 “项目
看起来都一样,那么它们可能共享非常相似的标记。现代标准鼓励网络开发者使用HTML来简单地提供网站的结构。网站的结构。CSS用于控制网站的表现形式,而Javascript则用于控制网站的
行为。如果你要搜刮的网站的开发者是好的,你要找的信息的信息会被语义化,你就可以很容易地从
HTML解析(parsing).
寻找模式
网络搜刮器的主要能力之一是寻找模式的能力。我们将在后面讨论更多关于寻找模式的不同方法,但由于它非常重要,所以值得提前提一下。一般来说,人类是懒惰的。建立你要搜刮的网站的人也不例外。如果有网页上的搜索结果列表,列表中的每一项都有自己的自定义标记的可能性几乎为零。
标记的可能性几乎为零。很多现代网站都是使用包含模板引擎的框架来构建的。这些模板
这些模板引擎通常有循环结构,让网站开发者可以说 “对于这个搜索结果列表中的每一个项目,打印出这个搜索结果列表,打印出相同的HTML,但改变标题和链接”。例如,一个网络开发者可以在他们的模板中写下以下代码。
如果你看不懂,也不用担心。基本上,你最终得到的是看起来像这样的HTML。
花几秒钟时间扫描一下这些HTML。注意到任何模式吗?每个搜索结果的标记搜索结果的标记几乎完全相同,但每个<li>标签内的细节略有不同。 从概念上讲,这使我们能够发现这样的事情。
- 用类结果遍历<li>元素的列表,应该可以得到每个搜索结果
- 在每个<li class=”result”>项中,有一个<a class=”result-link”>元素,它
包含项目的URL - 在每个<li class=”result”>项目中,有一个<span class=”result-title”>元素
包含项目的标题这类模式在许多不同的网站上到处都有使用。它不仅使网站开发者的生活变得更容易,也使我们作为网络搜刮者的生活变得更容易,为我们试图搜刮的数据因为我们要搜刮的数据很可能是从HTML的模式中提取出来的。只是需要花点功夫来发现这些模式.
谨慎一点
网络刮削有时会因为它的名字而得到坏名声。如果一个不懂技术的人听说你要 “搜刮 “他们的信息,他们可能不知道那是什么意思,但他们仍然会觉得这听起像是坏事或非法的事情。但他们仍然会觉得这听起来像是坏事或非法的事情。许多大型网站在其服务条款中明确禁止网络搜刮。他们可能称其为 “程序性访问 “或 “数据采集”,但这都是同样的意思。如果该网站确实禁止网络刮削,那么你必须决定你是否还想继续。一方面,几乎每个网站都会被谷歌的搜索蜘蛛和其他任何搜索引擎爬虫 “爬取”。搜索引擎爬虫的 “搜刮”。大多数网站所有者通常不会抱怨这种类型的搜刮,因为它允许他们的网站被搜索引擎发现,从而带来新的流量。另一方面,法院有时裁定,违反网站的服务条款或简单的根据美国反黑客的《计算机欺诈和滥用法》,违反网站的服务条款或简单地搜刮数据实际上可能构成重罪。一些著名的案例包括。
• In 2010, some ticket scalpers were charged for getting around the CAPTCHAs on Ticketmaster’s website.
• In 2012, internet activist Aaron Swartz was charged with 13 felonies for downloading an entire archive of scholarly articles from JSTOR’s website.
• Also in 2012, a man was charged when he discovered a few URL’s on AT&T’s website that displayed information about AT&T’s customers, totally in the clear.3
• Check out the “Legal Issues” section of the Wikipedia article on “Web Scraping
网页爬取最佳实践
以下是一些网络爬取技巧和最佳实践,可帮助您的项目取得成功。
尊重你正在爬取的网站
大多数网站都有 robots.txt 文件。它给出了爬虫可以访问哪些内容以及应该避免哪些内容的说明。虽然您可以忽略 robots.txt – 许多爬取工具都会这样做 – 但您不应该这样做。这损害了已经可疑的网络爬取声誉,并导致网站实施进一步的限制。
另一个提示是不要让网站的请求超载,尤其是在处理较小的域时。对于您应该提出多少请求,没有硬性规定;您必须根据域自行衡量。此外,请尝试在非高峰时段进行爬取,例如在网站服务器负载较少的夜间。
维护您的网络爬取工具
网页爬取需要持续维护。如果您自己构建了一个刮刀,它可能是拼凑在一起的工具。因此,可以合理地预期迟早一个或多个组件会出现故障并需要您的注意。
请注意,网站对于防止这种情况发生没有多大帮助。相反:一些目标会故意更改 URL 或页面结构(例如 HTML 标记)以破坏您的爬取工具。您必须投入时间和精力来保持事情顺利进行。
网页爬取障碍
网络爬取并不容易,一些网站会尽力确保您无法休息。以下是您可能会遇到的一些障碍。
克服障碍
您的爬取工具可能被阻止的原因有多种:它们可能源于它的行为方式,甚至可能是其自身呈现给网站的方式。
第一条规则是不要从同一个 IP 地址发出太多请求。它会限制你的速率,验证码被轰炸,然后被阻止。轮换代理可以帮助您避免这种结果。但即便如此,你也不应该只是盲目地一个接一个地发出请求——修改你的爬取模式和请求频率,让你的爬虫动作更自然。
另一个重要的部分是用户代理 – 您与网站的连接请求一起发送的 HTTP 标头元素。仅仅包含一个用户代理是不够的;它应该真实地模仿真实浏览器的配置。还需要不时轮换用户代理以像普通用户一样行事。
然后是浏览器指纹识别——关于您和您的计算机的信息编码在您的浏览器中。小型网站很少使用指纹技术。但是,如果您一直因为它们而遇到问题,您可能希望使用无头浏览器来模拟真实的用户行为。
避免验证码提示
验证码挑战会极大地阻碍您的网络爬取工作。它们可能会被触发,因为您使用数据中心代理或标记的住宅 IP 太快地发出太多请求。现代验证码还能够监控用户行为,并在他们发现异常时出现。
处理它们的一种方法是使用 验证码解决服务或简单地轮换您的 IP 地址。另一种方法是首先防止出现挑战。这是一个更好地模仿人类行为,限制和错开你的爬虫发出的请求数量的问题。
爬取 JavaScript 繁重的网站
与常规网站相比,依赖 JavaScript 运行或启用某些元素的网站是完全不同的野兽。JS 带来了指纹检查、延迟加载和其他让爬虫的生活变得悲惨的功能。如果可以的话,你应该避免它。
如果您打算使用 JavaScript 爬取网站,并且想自己动手,那是完全有可能的。您应该寻找一个无头浏览器。Selenium 是一种流行的选择,尽管越来越多的开发人员在 node.js 上转向 Puppeteer。
网页爬取的合法性
网络爬取并不是一件非常受欢迎甚至不道德的事情。爬取工具经常忽略网站的服务条款,以过多的请求关闭其服务器,甚至占用他们爬取的数据以启动竞争服务。难怪许多网站如此热衷于阻止任何可见的爬虫或爬虫(当然,搜索引擎除外)。
尽管如此,网络爬取本身是合法的,但有一些限制。多年来,发生了许多具有里程碑意义的案件。他们已经确定,只要信息是公开的并且不受版权保护,网络爬取网站是可以的。不过,最好联系您的律师以确保您没有违反任何法律。