Scrapy、Selenium和Beautifulsoup是Python网络爬取的3种流行的工具。现在就来发现它们3者之间的区别以及使用它们各自的方案。

你想知道Scrapy、Beautifulsoup和Selenium之间的区别吗?那么你就在正确的页面上。这篇文章将用来讨论3种流行的工具,并提供关于它们的完整解释。从你的阅读中,你会知道根据你的技能和个人项目要求使用哪种工具。如果你不太了解网络抓取,我建议你阅读我们关于网络抓取指南的文章–也可以看看我们关于如何使用Python建立一个简单的网络抓取器的教程。

虽然我看到新手们在比较Scrapy、Beautifulsoup和Selenium,但我认为没有理由进行这样的比较。这是因为它们实际上不是竞争对手,因为每一个都有自己的功能和受众。然而,它们中的每一个都在网络爬取中占有一席之地,而且它们的功能是叠加的。让我们分别看看它们,然后,我们可以根据你的技能和项目要求来推荐使用哪一个。


Scrapy

Scrapy是一个网络抓取框架,它配备了大量的工具,使网络抓取和爬取变得简单。它在设计上是多线程的,并建立在Twisted之上。Twisted是一个异步网络框架,遵循对服务器的非阻塞I/O调用。因为它是多线程和非阻塞的,所以它在性能方面实际上是最好的,实际上是3个工具中最快的。Scrapy比这三个工具的一个优势是,它带有发送请求和解析响应的模块。

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不具备发送网络请求的能力;你必须利用request模块或Python标准模块来发送网络请求–urllib。除了发送网络请求,BeautifulSoup也没有一个文档分析器;你必须从html.parser、HTML5lib、XML Parser和其他一些选项中选择。

我在此强调,缺乏网络请求发送能力和分析器并不意味着使用BeautifulSoup有任何困难。它只是意味着你需要安装这些依赖项来使用这个工具。你可能有兴趣知道,与其他工具相比,这些依赖项和BeautifulSoup仍然是最简单的选择。然而,与Scrapy相比,它的速度很慢。


Selenium

与BeautifulSoup和Scrapy相比,Selenium是一个不同的工具。Selenium并不是为网络爬取而生的。它实际上是为网络测试而开发的。Selenium被用于网络应用程序的自动化测试。它使网络浏览器自动化,你可以用它来代表你在浏览器环境中进行操作。然而,它后来也被纳入了网络爬取的范畴。Selenium可以发送网络请求,还带有一个分析器。通过Selenium,你可以从HTML文档中提取数据,就像你使用Javascript DOM API那样。

与两者相比,Selenium的主要优势在于它能加载Javascript,并能帮助你访问JavaScript背后的数据,而不一定要自己经历发送额外请求的痛苦。这使得Selenium不仅对自己有用,而且对其他工具也有用。使用Scrapy或BeautifulSoup的网络爬虫如果需要只有在加载Javascript文件时才能获得的数据,就会使用Selenium。

Selenium比BeautifulSoup快,但比Scrapy慢一点。


你应该使用哪一种:Scrapy、BeautifulSoup或Selenium?

所有这三个网络爬取库都是开源的,完全可以免费使用。有了这个,钱就不是一个决定性的因素。它们中的每一个都有一个支持其发展的开发者社区。那么,你应该使用其中的哪一个呢?

这取决于项目的要求。如果一个项目很复杂,Scrapy是适合的工具。这是因为它是一个为处理复杂的网络刮削任务而设计的框架。它甚至允许你扩展其功能。

对于小型项目,BeautifulSoup是首选库。你只需要安装request模块和你喜欢的HTML解析器(HTML.parser是默认安装的)。当你处理Javascript特色的网站时,Selenium就很方便了。

作为一个Python开发者,你应该学习如何使用它们中的三个。知道如何使用所有的东西将使你省去处理一个问题的压力,因为那是你所知道的一切。如果你知道如何使用它们中的三个,那么对于手头的项目来说,哪个是最好的问题。


总    结

使用Scrapy、BeautifulSoup和Selenium等工具,网络爬取可以变得很方便和简单。这些工具中的每一个都有它自己的应用。Scrapy是用于复杂项目的工具,而BeautifulSoup则用于小型任务。

Selenium用于Javascript特色的网站–也可以作为独立的网络爬取器和解析器使用。它们都有各自的用处,学习如何使用它们都会使你成为一个更好的网络爬取开发者。

这篇文章有用吗?

点击星号为它评分!

平均评分 / 5. 投票数:

到目前为止还没有投票!成为第一位评论此文章。

No more articles