BeautifulSoup和Scrapy搜寻器之间的区别?


134

我想建立一个网站,显示亚马逊和电子海湾产品价格之间的比较。其中哪个会更好,为什么?我对BeautifulSoup有点熟悉,但对Scrapy爬虫却不太了解


6
当两个网站都拥有出色的API时,为什么还要使用搜寻器?aws.amazon.com/python developer.ebay.com/common/api
Inbar Rose

5
我来自印度,我认为Amazon-Api不支持印度主机。没有针对印度的api(语言环境)主机= {'ca':'ecs.amazonaws.ca','cn':'webservices.amazon.cn','de':'ecs.amazonaws.de','es':'webservices.amazon.es' ,“ fr”:“ ecs.amazonaws.fr”,“ it”:“ webservices.amazon.it”,“ jp”:“ ecs.amazonaws.jp”,“ uk”:“ ecs.amazonaws.co.uk” ,'us':'ecs.amazonaws.com',}
Nishant Bhakta

11
如果我想抓取其他没有API的网站怎么办?
Nishant Bhakta 2013年

@InbarRose使用Amazon的产品API需要一个Amazon Associate帐户。
扎卡里·瑞安·史密斯

Answers:


231

Scrapy是一个Web-spider或Web Scraper 框架,您为Scrapy提供一个根URL以开始爬网,然后您可以指定要爬网和获取的URL数量的限制。它是用于爬网爬网的完整框架。

BeautifulSoup是一个解析库,它在从URL提取内容方面也做得很好,并允许您轻松解析其中的某些部分。它仅获取您提供的URL的内容,然后停止。除非您使用某些条件将其手动放入无限循环内,否则它不会爬网。

简而言之,使用Beautiful Soup,您可以构建类似于Scrapy的东西。美丽的汤是一个库,而Scrapy是一个完整的框架

资源


1
哪个更快,我的意思是我正在使用BeautifulSoup,并且要花费大约10秒的时间才能删除数据?刮得比美人汤快吗?
shuboy2014 '16

如果您将beautifulsoup与阻塞代码一起使用,则只要有独立的请求就可以使scrapy更快,但是我想您也可以将beautifulsoup与asyncio一起使用,以实现更好的性能。
dyeray

我会说,Scrapy和BeautifulSoup将会超级快,您将能够从两者中获得最大的收益。
拉胡尔

18

我认为两者都很好。即时通讯正在做一个同时使用两者的项目。首先,我使用scrapy抓取所有页面,并使用它们的管道将其保存在mongodb集合中,还下载页面上存在的图像。之后,我使用BeautifulSoup4进行pos处理,我必须更改属性值并获取一些特殊标签。

如果您不知道所需的产品页面,那么一个好的工具将是徒劳的,因为您可以使用它们的搜寻器来运行所有amazon / ebay网站来寻找产品,而无需进行明确的for循环。

看一下草率的文档,它非常易于使用。


我可以在Web服务器上使用Scrapy,因为它有很多依赖项,例如(Twisted,pywin32,pyOpenSSL等)。(很抱歉这个愚蠢的问题,我是python的新手)
Nishant Bhakta 2013年

在网络服务器上?我从来没有尝试过...我在外壳上使用它,执行“ scrapy crawl <name of crawler>”来运行蜘蛛程序……也许您可以在服务器上使用它,但是您必须使用python来调用它子流程模块(docs.python.org/2/library/subprocess.html)。正如我说过的,从不尝试此操作,但是它也许可以工作...只是一个注释,使用scrapy的日志消息只是为了让您知道爬虫可能在哪里发生错误(来自scrapy导入日志)。
rdenadai

4

两者都用于解析数据。

Scrapy

  • Scrapy是一个快速的高级Web爬网和Web爬网框架,用于对网站进行爬网并从其页面中提取结构化数据。
  • 但是当数据来自Java脚本或动态加载时,它有一些局限性,我们可以通过使用诸如splash,selenium等包来克服它。

BeautifulSoup

  • Beautiful Soup是一个Python库,用于从HTML和XML文件中提取数据。

  • 我们可以使用此包从Java脚本获取数据或动态加载页面。

Scrapy with BeautifulSoup是我们可以使用的最好的组合之一,可用于刮取静态和动态内容


2

我这样做的方法是使用eBay / Amazon API,而不是scrapy,然后使用BeautifulSoup解析结果。

API为您提供了一种正式的方式来获取与从scrapy爬网程序中获得的数据相同的正式方式,而无需担心隐藏您的身份,与代理相关的麻烦等。


8
该问题显然要求提供API不可用的解决方案。
罗哈尼尔

2

Scrapy 这是一个 Web抓取框架,其中包含大量的功能,使抓取变得更加容易,因此我们可以仅关注抓取逻辑。下面是我最喜欢的一些scrapy照顾我们的事情。

  • Feed导出:基本上,它可以使我们以CSV,JSON,jsonlines和XML等各种格式保存数据。
  • 异步抓取:Scrapy使用了扭曲的框架,该框架使我们能够一次访问多个URL,在每个URL中以非阻塞方式处理每个请求(基本上,在发送另一个请求之前,我们不必等待请求完成)。
  • 选择器:在这里我们可以比较scrap头和漂亮的汤。选择器使我们能够从网页中选择特定数据,例如标题,具有类名的某些div等)。Scrapy使用lxml进行解析,这比漂亮的汤要快得多。
  • 设置代理,用户代理,标题等:scrapy允许我们动态设置和旋转代理以及其他标题。

  • 项目管道:管道使我们能够在提取后处理数据。例如,我们可以配置管道以将数据推送到您的mysql服务器。

  • Cookies:scrapy自动为我们处理cookie。

等等

TLDR:scrapy是一个框架,提供了构建大规模爬网可能需要的所有内容。它提供了各种功能,可隐藏爬网的复杂性。您可以简单地开始编写网络爬虫,而无需担心安装负担。

美丽的汤 Beautiful Soup是用于解析HTML和XML文档的Python包。因此,使用Beautiful汤,您可以解析一个已经下载的网页。BS4非常受欢迎且古老。与刮y不同,您不能仅用美丽的汤来制作履带。您将需要其他库(例如request,urllib等)来使bs4成为爬虫。同样,这意味着您将需要管理要爬网的URL列表,要爬网的URL,处理Cookie,管理代理,处理错误,创建自己的函数以将数据推送到CSV,JSON,XML等。如果要加快速度比您将不得不使用其他库(如多处理)

总结一下。

  • Scrapy是一个丰富的框架,您可以使用它开始编写爬虫程序,而无需进行任何麻烦。

  • 美丽的汤是您可以用来解析网页的库。它不能单独用于刮网。

您绝对应该在您的Amazon和e-bay产品价格比较网站上使用scrapy。您可以建立一个url数据库并每天运行爬虫(cron作业,Celery用于计划爬虫)并更新数据库的价格。这样,您的网站将始终从数据库中提取,并且爬虫和数据库将作为单独的组件。



0

使用scrapy可以节省大量代码,并从结构化编程开始。如果您不喜欢scapy的任何预写方法,则可以使用BeautifulSoup代替scrapy方法。大型项目同时具有这两个优点。


0

差异很多,选择任何工具/技术都取决于个人需求。

几个主要区别是:

  1. BeautifulSoup 比Scrapy 容易学习
  2. Scrapy的扩展,支持和社区大于BeautifulSoup。
  3. 当BeautifulSoup是解析器时,Scrapy应该被视为蜘蛛
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.