in

Scrapy/Beautiful Soup/Selenium – 你应该选择哪一个?

如何选择Scrapy,Beautiful Soup和Selenium

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 在网络爬取工具中具有极大的吸引力,因此您可以从出色的文档和活跃的在线开发人员社区中受益。 

Beautiful Soup允许并行化请求。但是设置起来不是很容易,速度上还是比不上Scrapy。 

总的来说,Beautiful Soup 是一次性或小型网络爬取作业的绝佳选择,在这些作业中您不需要持续地大规模提取数据。 


Selenium——一个用于依赖 JavaScript 的页面的 Web 驱动程序

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

这些年来,越来越多的网站引入了依赖 JS 来工作的功能。一些例子可能是异步加载或那些你可以无限滚动的无底页面。常规的网页爬取脚本无法爬取嵌套在 JavaScript 元素中的内容,因此您需要先加载整个页面。能够这样做是 Selenium 声名鹊起的原因。 

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

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

然而,正是因为它控制着整个无头浏览器,Selenium 对资源的要求并不低。多线程的唯一方法是启动一个新的浏览器实例,这无济于事。效率根本不存在。如今,可以说有更好的无头网络爬取选择,例如 Puppeteer 或 Playwright。 

尽管如此,如果您需要爬取少量到中等数量的依赖于 JavaScript 的页面, Selenium 仍然是一个不错的选择。否则,你最好有足够的计算能力,否则你的爬取会变得很慢。 


比较三个选择

这是一张简短的表格,并排显示了 Scrapy、Beautiful Soup 和 Selenium 的主要特性: 

ScrapyBeautiful SoupSelenium
网页爬取是的是的
数据解析是的是的是的
数据存储是的是的
异步是的
JavaScript 渲染使用外部库是的
选择器CSS、XPathCSSCSS、XPath
代理是的使用外部库是的
表现快速地平均的慢的
可扩展性 高的有限的有限的
学习曲线陡峭简单的陡峭
最适合持续的大型爬取项目小型到一般的爬取项目需要 JavaScript 的中小型爬取项目

常见问题

1. Scrapy 比 Selenium 快吗?

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

2. Selenium 适合网页爬取吗?

虽然 Selenium 并非专为网络爬虫设计(而是用于自动化测试),但它对于那些依赖 JavaScript 的网站来说也能很好地进行数据爬取。

3. 初学者应该选择哪种工具?

Beautiful Soup是最适合初学者尝试网络爬虫的选择。再加上像Requests这样的请求库,你很快就能编写简单的网络爬虫脚本。

blank

Written by 爬取 大师

阿里P12级别选手,能够突破各种反爬, 全能的爬取大师,擅长百万级的数据抓取!没有不能爬,只有你不敢想,有爬取项目可以联系我邮箱 [email protected] (带需求和预算哈, 不然多半不回复)