我们使用联盟链接。它们让我们能够维持运营,而您无需承担任何费用。

Scrapy、Beautiful Soup、Selenium ——该使用哪一个?

我们比较了三种流行的网络抓取工具。

scrapy 与 selenium 与 beautiful soup 的缩略图

Scrapy、Beautiful Soup 和 Selenium 是三种流行的 网络抓取 工具。如果您是抓取新手,或者只是还没有尝试过所有工具,那么您可能会很难确定自己需要哪种工具。本指南简要介绍了每种工具的功能以及最适合的情形。如果您很着急,可以直接跳到下面的比较表。 

Scrapy – 适用于大规模数据抓取的完整软件包

Scrapy 是一个所谓的网络爬虫和抓取框架。与其他一些工具不同,它 不需要任何其他依赖项即可工作 (除非你正在处理 JS)。换句话说,它包含了你需要的一切 页面,下载和 解析,最后存储你抓取的数据。

Scrapy 是 基于 Python 且开源。这两个特性使它成为网页抓取的热门选择,这意味着您可以找到很多有关使用它的信息:既可以通过阅读全面的文档,也可以咨询 StackOverflow 等网站上的其他抓取工具。

根据设计,Scrapy 是 可扩展性强。除了丰富的基本功能外,它还支持中间件和扩展,这两者都为 Scrapy 脚本(也称为蜘蛛)带来了自定义功能。该框架允许添加 代理,控制抓取深度、cookie 和会话处理。甚至还有一个交互式控制台,用于实时查看您是否选择了正确的 CSS 或 XPath 表达式。 总之,Scrapy功能强大。

Scrapy 最好的功能之一是它可以 异步处理请求。因此,您可以一次从多个页面提取数据,这使得该框架非常快并且非常适合大规模抓取。  

然而,所有这些功能和可扩展性意味着 Scrapy 不是最容易使用的工具。尽管文档很丰富,但您仍需要投入大量时间才能掌握要领。 

它还 无法直接渲染 JavaScript,所以你必须使用 无头浏览器 例如 Puppeteer、Splash 或 Selenium。 

总的来说,如果你有以下情况,你应该考虑使用 Scrapy: 要做一个大型的网络抓取项目或者着眼于将来的大规模抓取。 

Beautiful Soup – 适合初学者和小型作业的简单解析器

正如 Beautiful Soup 的开发人员所说,他们来这里是为了帮助你从那个写得很糟糕的网站中提取数据。他们这样做是为了给你一个 基于Python的数据解析库

从本质上讲,Beautiful Soup 就是一个库,它可以构建 HTML 或 XML 页面,选择您需要的数据,并帮助您以适当的格式提取数据。与 Scrapy 不同, 它无法抓取页面或发出 GET 请求。因此,您必须使用另一个库(例如 Requests)来实现这一点。 

实际上,Beautiful Soup 不是一个解析器,而是 多个解析工具合而为一。它在后端使用 html.parser、HTML5lib 和 lxml,因此您可以尝试各种解析方法。例如,lxml 是最快的,而 HTML5lib 速度较慢但非常灵活。 

Beautiful Soup 最大的好处是 使用非常简单:只需几行代码,几分钟内即可编写一个基本的抓取工具。而且它不容易出问题。这些功能让 Beautiful Soup 在网络抓取工具中具有极大的吸引力,因此您既可以从出色的文档中受益,也可以从活跃的在线开发者社区中受益。 

美丽的汤 允许并行请求。但是设置起来并不是很容易,而且速度上还是没法和Scrapy相比。 

总体而言,Beautiful Soup 是 一次性或小型网页抓取任务的绝佳选择,您不需要大规模地持续提取数据。 

Selenium – JavaScript 依赖页面的 Web 驱动程序

硒是一种 可让您以编程方式控制无头浏览器的 API。其主要目的是帮助进行自动化 Web 测试,但 Selenium 也在 Web 抓取中发挥了作用。原因很简单 - 它能够处理 JavaScript

多年来,越来越多的网站引入了依赖 JS 才能运行的功能。一些示例可能是异步加载或那些可以无限滚动的无底页面。常规的网页抓取脚本无法抓取嵌套在 JavaScript 元素中的内容,因此您需要先加载整个页面。能够做到这一点是 Selenium 成名的原因。 

除了作为 JavaScript 问题的早期解决方案之外, 硒的用途也很广泛。它可以运行多种编程语言,包括 Python、Java、Ruby 和 node.js。它可以控制所有主流浏览器:Chrome、Firefox,甚至 Internet Explorer。作为一个主流工具,它拥有一个庞大的社区,有着悠久的问题和解决方案历史。

Selenium 不仅能让您加载网站,还能让您与网站交互:模​​拟操作、填写表单、点击按钮以及执行其他操作。换句话说,它包括了适当的无头浏览器的全部功能。 

然而,正是因为它控制着整个无头浏览器, Selenium 并不占用太多资源。实现多线程的唯一方法是启动一个新的浏览器实例,这无济于事。效率根本就不高。如今,可以说有更好的无头网页抓取选项,例如 Puppeteer 或 Playwright。 

不过,如果你需要,Selenium 是一个不错的选择 抓取少量到中等数量依赖 JavaScript 的页面否则,你最好拥有大量的计算能力,否则你的抓取速度会变得非常慢。 

比较三个选项

下面是一个简短的表格,并排展示了 Scrapy、Beautiful Soup 和 Selenium 的主要特性: 

 Scrapy美丽的汤
网页抓取

没有
数据解析
数据存储没有
异步没有没有
JavaScript 渲染使用外部库没有
选择CSS,XPath的CSSCSS,XPath
代理使用外部库
性能快速一般放慢
可扩展性 有限有限
学习曲线简便
最适合持续的大规模抓取项目小型至中型抓取项目需要 JavaScript 的小型到中型抓取项目

 

代理服务器作为房屋

关于 Scrapy、Beautiful Soup 和 Selenium 的常见问题

是的。Scrapy 不需要渲染整个页面 – 而且它是异步的 – 所以它比 Selenium 快得多。

虽然 Selenium 不是为网页抓取(而是为自动化测试)而设计的,但它非常适合抓取依赖于 JavaScript 的网站。

对于想要尝试网页抓取的初学者来说,Beautiful Soup 是最佳选择。将它与 Requests 之类的请求库结合使用,您很快就能编写简单的网页抓取脚本。

Adam Dubois 的图片
亚当·杜波依斯
代理极客和开发人员。