BeautifulSoup和Scrapy爬虫的区别是什么?

163

我想制作一个网站,展示亚马逊和eBay产品价格的比较。哪个更好并且为什么? 我对BeautifulSoup有一些了解,但不太了解Scrapy爬虫


7
这两个网站都有很好的API,为什么还需要使用网络爬虫? - Inbar Rose
6
我来自印度,我认为Amazon-Api不支持印度主机。印度没有适用的**api(locale)**。 HOSTS = {'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
14
如果我想爬取一个没有API的其他网站怎么办? - Nishant Bhakta
@InbarRose 使用亚马逊的产品API需要一个亚马逊联盟账户。 - Zachary Ryan Smith
bs4Scrapy 是两个Python中常用的网络爬虫框架。 - Moein Kameli
9个回答

279

Scrapy 是一个用于爬取网站或抓取网页数据的框架。你可以指定一个起始 URL,然后约束它要爬取和获取的 URL 数量等。它是一个完整的网络爬虫框架。

BeautifulSoup 是一个解析库,也能够很好地抓取 URL 的内容,并允许你轻松地解析其中的某些部分。它只会获取你给出的 URL 的内容,然后停止。除非你手动将其放在具有某些条件的无限循环内,否则它不会执行任何爬取操作。

简单来说,使用 Beautiful Soup 你可以构建类似于 Scrapy 的工具。Beautiful Soup 是一个库,而 Scrapy 是一个完整的框架。

来源


1
哪个更快,我的意思是我正在使用BeautifulSoup,它需要大约10秒钟来抓取数据?Scrapy比BeautifulSoup更快吗? - shuboy2014
如果您使用beautifulsoup与阻塞代码,那么只要有独立的请求需要处理,scrapy应该会更快,但我想您也可以使用asyncio来配合beautifulsoup以获得更好的性能。 - dyeray
我认为,Scrapy和BeautifulSoup一起使用会非常快速,您将能够充分发挥它们的优势。 - Rahul
1
Scrapy支持开箱即用的异步请求,而使用beautifulsoup则需要使用其中一个异步客户端,例如aiohttp客户端。 - ruslaniv

21

我认为两者都很好...我现在正在做一个项目,同时使用这两个工具。首先,我使用Scrapy爬取所有的页面,并使用他们的管道将其保存在MongoDB的集合中,还下载页面上存在的图片。

之后,我使用BeautifulSoup4进行后处理,必须更改属性值并获取一些特殊标记。

如果您不知道想要哪些页面产品,那么一个很好的工具是Scrapy,因为您可以使用它们的爬虫程序在所有亚马逊/易趣网站上运行,而无需进行显式的for循环操作。

请查看Scrapy文档,它非常简单易用。


那么我能在Web服务器上使用Scrapy吗?因为它有许多依赖项,如(Twisted、pywin32、pyOpenSSL等)。 (对不起,这是一个愚蠢的问题,我是Python的新手) - Nishant Bhakta
在Web服务器上?我从未尝试过...我在shell中使用它,执行“scrapy crawl <爬虫名称>”来运行蜘蛛...也许你可以在服务器上使用这个,但你必须使用Python子进程模块(http://docs.python.org/2/library/subprocess.html)调用它。正如我所说,我从未尝试过这个,但也许它能够工作...只是一个提示,使用Scrapy的日志消息只是为了让你知道在你的爬虫中可能发生错误的地方(从Scrapy导入日志)。 - rdenadai

15

Scrapy Scrapy是一个网络爬虫框架,提供了许多好处,使得我们可以更轻松地进行爬取,从而专注于爬取逻辑。以下是Scrapy为我们处理的一些我最喜欢的事情。

  • Feed exports:它基本上允许我们以各种格式(如CSV、JSON、jsonlines和XML)保存数据。
  • 异步爬取:Scrapy使用Twisted框架,使我们能够同时访问多个URL,其中每个请求以非阻塞方式处理(基本上我们不必等待请求完成才发送另一个请求)。
  • Selectors:这是我们可以将Scrapy与beautiful soup进行比较的地方。选择器是允许我们从网页中选择特定数据的地方,例如标题、某个具有类名的div等)。Scrapy使用比beautiful soup更快的lxml进行解析。
  • 设置代理、用户代理、标头等:scrapy允许我们动态设置和旋转代理和其他标头。

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

  • Cookies:scrapy会自动处理cookies。

等等。

TLDR: scrapy是一个框架,提供了构建大规模网络爬虫所需的一切。它提供了各种功能,隐藏了爬行网站的复杂性。用户可以简单地开始编写网络爬虫,而不必担心设置负担。 Beautiful soup Beautiful Soup是一个用于解析HTML和XML文档的Python软件包。因此,使用Beautiful Soup可以解析已经下载的网页。BS4非常流行和古老。与scrapy不同,你不能仅使用beautiful soup制作爬虫。你需要其他库,如requests、urllib等来使用bs4进行网络爬虫。这意味着你需要管理正在被爬取的URL列表、处理cookies、管理代理、处理错误、创建自己的函数将数据推送到CSV、JSON、XML等。如果你想加速,就需要使用其他库,如multiprocessing
总之: - Scrapy是一个丰富的框架,你可以使用它开始编写网络爬虫,无需任何麻烦。 - Beautiful Soup是一个可以用于解析网页的库。它不能独立用于抓取网络。

你绝对应该使用Scrapy来建立亚马逊和eBay产品价格比较网站。你可以建立一个URL数据库,并每天运行爬虫程序(cron jobs,Celery用于安排爬取),并更新数据库中的价格。这样你的网站将始终从数据库中提取数据,而爬虫程序和数据库将作为独立的组件。


3

两者都用于解析数据。

Scrapy

  • Scrapy是一个快速、高级的网络爬虫和网络抓取框架,用于爬取网站并从其页面中提取结构化数据。
  • 但是当数据来自JavaScript或动态加载时,它有一些限制,我们可以使用像splash、selenium等包来克服这些限制。

BeautifulSoup

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

  • 我们可以使用此软件包从JavaScript或动态加载的页面中获取数据。

Scrapy与BeautifulSoup结合使用是我们可以用来爬取静态和动态内容的最佳组合。


2

BeautifulSoup 是一个库,它可以让你从网页中提取信息。

Scrapy 则是一个框架,它不仅可以像 BeautifulSoup 一样提取信息,还可以为你的爬虫项目提供许多其他功能,例如用于保存数据的管道。

你可以查看这篇博客来开始使用 Scrapy:https://www.inkoop.io/blog/web-scraping-using-python-and-scrapy/


2

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

API提供了一个官方的方式来获取与scrapy爬虫相同的数据,无需担心隐藏身份、处理代理等问题。


9
问题明确要求提供没有API的解决方案。 - Rohanil
2
另外,只是好奇。如果您实际上正在使用返回JSON的API,为什么需要Beautiful Soup进行解析? - Jay Stevens

1
使用scrapy,可以节约大量的代码,并开始进行结构化编程。如果您不喜欢scapy的任何预先编写的方法,则可以使用BeautifulSoup来代替scrapy方法。大型项目充分利用两者优势。

1
美味汤是一个小型网络爬虫库。它可以完成你的工作,但有时不满足你的需求。我的意思是,如果你在大量数据中爬取网站,那么在这种情况下,美味汤就会失败。
在这种情况下,你应该使用Scrapy,它是一个完整的爬虫框架,可以完成你的工作。此外,Scrapy支持各种数据库,因此它比其他网络爬虫库更强大。

0

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

一些主要的区别包括:

  1. BeautifulSoup 相对于 Scrapy 来说更容易学习。
  2. Scrapy 的扩展、支持和社区比 BeautifulSoup 更大。
  3. 应该将 Scrapy 视为 Spider,而将 BeautifulSoup 视为 Parser。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接