Scrapy、Selenium 和 Beautifulsoup 是 Python 网页抓取工具中三种流行的网页抓取工具。现在来了解这三者之间的区别以及每种工具的使用场景。
想知道 Scrapy、Beautifulsoup 和 Selenium 之间的区别吗?
那么你来对地方了。本文将讨论这 3 种流行的工具,并提供完整的解释。从你将阅读的内容中,你将知道根据你的技能和个人项目要求使用哪种工具。如果你对 Web Scraping 不是很熟悉,我建议你阅读我们关于 Web Scraping 指南的文章——还可以查看我们关于如何使用 Python 构建简单 Web Scraper 的教程。
事实是,虽然我看到新手比较 Scrapy、Beautifulsoup 和 Selenium,但我认为没有理由进行这样的比较。这是因为它们实际上不是竞争对手,因为每个都有自己的功能和受众。然而,它们在网络抓取中各有千秋,而且它们的功能有重叠。让我们分别看看它们,然后我们可以根据您的技能和项目要求推荐使用哪一个。
Scrapy
Scrapy是一个网络爬虫框架,它附带了大量工具,使网络爬虫和抓取变得简单。它在设计上是多线程的,并建立在 Twisted 之上。Twisted 是一个异步网络框架,它遵循对服务器的非阻塞 I/O 调用。由于它是多线程和非阻塞的,因此它实际上是性能最好的,实际上是 3 个工具中速度最快的。Scrapy 相对于这 3 个工具的一个优势是它附带了发送请求和解析响应的模块。
Scrapy 是开发复杂网络爬虫和抓取工具的工具,因为您可以创建大量工作器,并且每个工作器都可以轻松工作。它旨在消耗更少的内存并最低限度地使用 CPU 资源。事实上,一些基准测试表明 Scrapy 比其他抓取工具快 20 倍。它是可移植的,并且其功能可以扩展。
Scrapy 的主要问题是它不是以初学者为中心的工具。Scrapy 的文档有点复杂。我必须承认,当我开始学习使用 Python 进行网页抓取时,我可以选择使用 Scrapy 进行学习,因为我听说它最适合构建复杂的抓取工具,并且具有许多功能。然而,当我发现它不适合初学者时,我不得不放弃这个想法。Scrapy 的一个主要缺点是它不渲染 JavaScript;您必须发送 Ajax 请求才能获取隐藏在 JavaScript 事件后面的数据或使用第三方工具(如 Selenium)。
Beautifulsoup

BeautifulSoup与 Scrapy 一样,是一个开源工具,用于网页抓取。然而,与 Scrapy(一个网页爬取和抓取框架)不同,BeautifulSoup 不是。BeautifulSoup是一个可用于从 HTML 和 XML 文档中提取数据的模块。BeautifulSoup 是一个初学者友好的工具,新手可以很快上手。这是因为它有非常好的文档和友好的用户社区。大多数网页抓取工具在转向 Scrapy 之前一定使用过 BeautifulSoup。该工具并不复杂,可让您更轻松地遍历 HTML 文档并选取所需数据。
虽然你可以使用它进行多任务处理,但你必须非常擅长 Python 多线程编程才能使用 BeautifulSoup 有效地进行多任务处理。BeautifulSoup 的主要缺点之一是它严重依赖其他库才能工作。BeautifulSoup 没有发送 Web 请求的功能;你必须使用请求模块或 Python 标准模块来发送 Web 请求 – urllib。除了发送 Web 请求之外,BeautifulSoup 也没有文档解析器;你必须从 html.parser、HTML5lib、XML Parser 和其他一些选项中进行选择。
我在这里强调的是,缺少 Web 请求发送功能和解析器并不会使 BeautifulSoup 的使用变得困难。这只意味着您需要安装依赖项才能使用该工具。您可能有兴趣知道,与其他工具相比,这些依赖项加上 BeautifulSoup 仍然是最简单的选择。但是,与 Scrapy 相比,它的速度很慢。
Selenium

与 BeautifulSoup 和 Scrapy 相比,Selenium是一种不同的工具。Selenium不是为网络抓取而设计的。它实际上是为网络测试而开发的。Selenium 用于网络应用程序自动化测试。它可以自动化网络浏览器,您可以使用它代表您在浏览器环境中执行操作。但是,它后来被纳入网络抓取。Selenium 可以发送网络请求,还附带一个解析器。使用 Selenium,您可以像使用 Javascript DOM API 一样从 HTML 文档中提取数据。
Selenium 相对于这两者的主要优势在于它可以加载 JavaScript,并可以帮助您访问 JavaScript 背后的数据,而不必亲自发送额外请求。这使得 Selenium 不仅对自己有用,而且对其他工具也很有用。使用 Scrapy 或 BeautifulSoup 的 Web 抓取工具如果需要仅在加载 JavaScript 文件时才可用的数据,则会使用 Selenium。
Selenium 比 BeautifulSoup 快,但比 Scrapy 慢一点。
您应该使用哪一个——Scrapy、BeautifulSoup 还是 Selenium?
这三个网页抓取库都是开源的,完全免费使用。因此,金钱不是决定因素。每个库都有一个开发者社区支持其开发。那么你应该使用哪一个呢?
这取决于项目要求。如果项目很复杂,Scrapy 就是适合该工作的工具。这是因为它是一个专为处理复杂的 Web 抓取任务而设计的框架。它甚至允许您扩展其功能。
对于较小的项目,BeautifulSoup 是首选库。您只需安装请求模块和您喜欢的 HTML 解析器(默认情况下会安装 HTML.parser)。当您处理以 Javascript 为特色的网站时,Selenium 非常方便。
作为 Python 开发人员,您应该学习如何使用这三种语言。了解如何使用所有语言将为您省去处理其中一种语言的压力,因为您只知道其中一种语言。如果您知道如何使用这三种语言,那么对于手头的项目来说,哪种语言是最好的就不重要了。
结论
使用 Scrapy、BeautifulSoup 和 Selenium 等工具,网页抓取变得方便又简单。这些工具各有各的应用。Scrapy 适用于复杂项目,而 BeautifulSoup 适用于较小的任务。
Selenium 用于以 Javascript 为特色的网站,也可以用作独立的网页抓取工具和解析器。它们各有各的用处,学习如何使用它们会让你成为更好的网页抓取开发人员。
1 Response