这是Scrapy和Selenium之间的 "对比 "文章。
什么是Web Scraping?
网络刮削是指从网页上提取或 "刮削 "数据的行为。其一般过程如下。首先,目标网页被 "抓取 "或下载。接下来,我们的数据被检索出来,并被解析成合适的格式。最后,我们可以浏览解析后的数据,选择我们想要的数据。
上述过程旨在通过创建 "网络爬虫 "来实现完全自动化,为什么要在网上为你下载数据呢?
Selenium
你看,Selenium实际上并不是一个Web Scraping库。它能做类似Web Scraping的任务吗?嗯,是的,它可以。Selenium实际上是一个网络自动化库,用于自动化人们在网络上可能做的任务。
类似于PyAutoGUI(桌面自动化库)这样的库是用来控制桌面上的鼠标、键盘、剪贴板等的,Selenium在网络浏览器中控制一切。它基本上是模仿人类,通过打开浏览器,移动鼠标,点击按钮等。
由于这些网络自动化能力,我们可以使用Selenium执行类似于网络刮擦的任务。例如,点击一个下载链接,或下载一个图片。
Selenium还具有一些方便的CSS和HTML检测能力,能够在屏幕上定位元素,只用它的名字、标签、类别或任何其他定义属性。
你还可以将Selenium与其他库配对,以增加你的功能。根据我的观察,大多数与网络相关的库都是相互兼容的,允许它们一起工作以达到最终的结果。你甚至可以将Scrapy和Selenium配对使用。
Scrapy
Scrapy是一个完整的Python框架,设计用于提取、处理和存储数据。Scrapy框架为你提供了大量的内置功能和代码,使你可以执行复杂的任务,而不必编写大量的代码。
尽管Scrapy具有所有惊人的和不可替代的功能,但它可能有点难以设置和学习。作为一个合适的框架,它的学习曲线比其他简单的库要陡峭一些。
还有一个更简单的库叫BeautfiulSoup,它的学习曲线更容易。它就像Scrapy,但没有许多特殊的特性和额外的功能。但它使用起来很简单,使它成为简单的搜刮工作的好选择。如果你想了解更多关于Scrapy和BeautifulSoup的信息,请阅读这篇比较文章。
关于Scrapy,我们还有更多要说的,但为了避免重复,我们将把它留到以后。
Scrapy vs Selenium - 分析
**刮擦速度:**Scrapy比Selenium 很多由于两者操作方式的巨大差异,Scrapy比Selenium快。基本上,Scrapy只是访问你给它的URL,所需的工作和加载量最小,而Selenium在开始实际解析前,会渲染整个浏览器的HTML、CSS和JavaScript。
**JavaScript。**Selenium胜过Scrapy的地方是它的JavaScript处理。Scrapy在刮取动态渲染的元素(使用JS)时可能会遇到困难。另一方面,Selenium在开始操作之前会先生成整个页面(CSS+JS)。这确保了它不会漏掉任何这样的元素。
然而,在Scrapy中还有一个叫做Scrapy-Splash的模块,它也被设计成能够搜刮JS内容。
**自动化。**Selenium显然在这方面有优势,因为它实际上是一个网络自动化库。不过我想特别指出的是,Scrapy在自动登录网站等事情上可能会变得相当复杂。在一些网站上,你需要先登录(访问数据),然后才能开始搜刮,所以这是个问题。
根据我的经验,当涉及到自动登录时,Selenium更容易处理。你可以看看这个Selenium登录的教程,以及这个Scrapy登录的教程(为了比较)。Selenium的方式要简单得多,因为它擅长寻找元素(登录字段)和操作它们(插入数据并提交)。
**网络搜刮。**当谈到纯粹的网络刮削,以及所涉及的附带功能时,Scrapy胜出。这不是我们能用几句话就能概括的,所以我们在下一节专门讨论这个话题。
Scrapy的特殊功能
链接跟踪。从技术上讲,Selenium可以在一定程度上取代这个功能(它可以检测和点击链接),但Scrapy更胜一筹,更容易进行链接跟踪。你甚至可以得到内置的选项,如 "避免重复链接 "和 "设置链接深度 "等。
轮流代理。Scrapy方面的另一个非常方便的功能是旋转代理。你可以使用这些来避免由于大量的请求而被禁止进入一个网站的风险。基本上,每发送一个请求,你就在一个代理列表中轮换一次。
自动节流。蜘蛛被阻止的主要原因是它们给服务器带来了额外的负荷,特别是当它们一次发送大量的请求时。自动节流设置使Scrapy根据它所针对的网站的负载和流量自动调整速度。这既能保证你不被发现(不那么明显),也能使网站服务器更容易(由于负载分散)。
并发请求。Scrapy有能力发送并发请求,而不是一个一个地发送。你可以把它看作是并行发送的请求。这是Scrapy比其他搜刮库快很多的原因之一。
当然还有更多的原因,但我想你已经明白了其中的要领。你也许可以在其他库中复制上述功能,但为什么要这样做呢,因为你只需要在Scrapy中写几行,或者只是打开一个选项。
Scrapy vs Selenium - 结论
你可以把它们看成是解决同一问题的两种方法。目标相似,但实现这一目标的方式完全不同。尽管如此,当涉及到硬核刮削时,Scrapy才是正确的方法。仅仅因为Selenium "可以 "做到这一点,并不意味着应该使用它。
基本的最终结果是,Selenium可以做很多Scrapy不能做的事情(主要是与网络刮擦无关的),而Scrapy可以做很多与网络刮擦有关的事情,而Selenium不能做。
既然我们在这里讨论的是网络刮削,Scrapy显然是赢家。但这并不意味着你应该忽视Selenium。它是一个相当不错的框架,有它自己的用途,也可以和Scrapy搭配使用。如果可以的话,扩展你的视野,同时学习这两个框架。
Scrapy与Selenium的比较到此为止。我们非常欢迎对CodersLegacy的任何建议或贡献。关于文章内容的问题可以在下面的评论区提出。
The postScrapy vs Selenium | Web Scraping Frameworksappeared first onCodersLegacy.