在网页抓取和数据提取中使用无头浏览器

0
在网页抓取和数据提取中使用无头浏览器

如果您参与过任何类型的 Web 数据提取项目,您可能听说过无头浏览器。 也许您想知道它们是什么,以及您是否需要使用它们。 在这里,我想解决一些关于无头浏览器及其使用方式的基本问题。

让我们首先看看在大多数抓取框架如何工作的上下文中访问网页时会发生什么。

要阅读此博客,您几乎肯定会在计算机或移动设备上使用某种网络浏览器。 从本质上讲,浏览器是一种软件,它呈现网页以供在目标设备上查看。 它将从服务器发送的代码转换为在您的屏幕上可读的内容,文本和图像由漂亮的字体、弹出窗口、动画和所有其他漂亮的东西装饰。 更重要的是,浏览器还允许您通过单击、滚动、悬停和滑动来与页面内容进行交互。

实际上是您的计算机执行渲染的驴式工作,这通常涉及浏览器向服务器发送数百个 HTTP 请求。 您的浏览器将首先请求初始的“原始”HTML 页面内容。 然后它将向服务器发出一系列进一步请求,以获取其他元素,例如样式表和图像。

在 Web 的早期,站点完全基于 HTML 和 CSS 构建。 现在,它们旨在提供更丰富、更具交互性的用户体验。 这意味着现代网站通常严重依赖 JavaScript,JavaScript 会近乎实时地呈现所有精美的内容,以造福观众。 您可以查看当网站在缓慢的 Internet 连接上加载缓慢时发生的情况。 页面的基本元素首先出现。 然后几秒钟后,看起来沉闷的文本被重新渲染为时髦的自定义字体,其他视觉金属丝元素随着 JavaScript 的工作而出现。

如今,大多数网站还提供某种跟踪代码、用户分析代码、社交媒体代码和无数其他东西。 浏览器需要下载所有这些信息,决定需要用它做什么,并实际呈现它。

现在假设您想编写一个抓取脚本来自动化为某些网站提取数据的过程。 此时,您可能想知道是否需要使用某种浏览器来实现这一点。 假设您正在编写一些代码来比较多个不同在线市场上的产品定价。 某个商品的价格甚至可能不包含在产品页面的原始 HTML 代码中。 它不会作为该页面上的可见元素存在,直到它被客户端执行的 JavaScript 代码呈现 – 即向服务器发出页面请求的浏览器。

要从数千甚至数百万个网页中大规模提取信息,您肯定需要某种自动化解决方案。 雇用一屋子的人,让他们坐在大量电脑前并记下他们在屏幕上看到的内容,是非常耗时和昂贵的。 这就是无头浏览器的用途。 顺便说一句,什么是“无头”? 这只是意味着浏览器不受人类操作员的控制,通过图形界面和鼠标移动与目标站点进行交互。

无需使用人工与网站交互并从网站复制信息,您只需编写一些代码,告诉无头浏览器去哪里以及从页面获取什么。 通过这种方式,您可以自动呈现页面并获取所需信息。 浏览器有多种编程接口——最受欢迎的是 Puppeteer、Playwright 和 Selenium。 它们都做着大致相似的工作,让您编写一些代码,告诉浏览器访问页面、单击链接、单击按钮、将鼠标悬停在图像上并截取所看到的内容。

但这真的是刮刮乐的最佳方式吗? 答案并不总是明确的“是”或“否”——但更多时候是“视情况而定”。

大多数流行的抓取框架在后台不使用无头浏览器。 这是因为在大多数用例中,无头浏览器并不是获取信息的最有效方式。

假设您只想从您正在阅读的这篇文章中提取文本。 要在屏幕上看到它,浏览器需要发出数百个请求。 但是,如果您尝试使用一些命令行工具(例如 cURL)向我们的 URL 发出请求,您将看到该文本实际上在初始响应中可用。 换句话说,您实际上不需要担心样式、图像、用户跟踪和社交媒体按钮来获得您真正感兴趣的部分,即文本本身。

所有这些都是为了人类的利益以及他们与网站的互动。 然而,scraper 并不真正关心页面上是否有一些漂亮的图像。 他们不会点击社交媒体分享按钮——除非他们有他们的机器人社交网络,但人工智能还没有那么先进。 抓取器只会看到原始 HTML 代码:这对人类来说并不容易阅读,但对于机器来说已经足够了。 如果它只是在寻找这篇博文,那么它实际上就是您的程序所需要的全部内容。

对于许多用例,仅向一个 URL 发出请求而无需使用无头浏览器呈现整个页面的效率要高得多。 与其对您的程序不需要的东西(如图像和样式表)发出一百个请求,您只需询问相关信息的关键部分。 不过,在某些用例中,您可能需要无头浏览器。

话虽如此,越来越需要渲染和与真实浏览器的交互来对抗反机器人系统。 虽然这些技术主要用于阻止不良行为者攻击和潜在地利用站点上的漏洞,但反机器人也可以阻止合法用户。 在质量保证等其他用例中,您实际上需要模拟真实用户:这确实是 QA 的全部目标,尽管自动化开始发挥作用以一致且大规模地实现这一目标。 在这里,我们讨论的是诸如单击登录按钮、将商品添加到购物车以及在页面之间切换等操作。

即使您的数据提取工作现在不需要无头浏览器,仍然值得更好地了解它们。 如果您是一名开发人员,拥有自己的爬虫,并且需要一个智能代理网络来让它们大规模运行,请前往我们的无头浏览器文档并尝试使用它们编写一些程序。 同样,如果您喜欢新鲜事物,请阅读我们的研发主管 Akshay Philar 撰写的这篇文章。

Leave a Reply