Scrapy vs BeautifulSoup

2019-12-23 15:40:04 浏览数 (1)

1 简介

在本教程中,我们将会讨论ScrapyBeautifulSoup,比较它们有何不同,从而帮助你们来做出选择,哪一个对于你们的实际项目中是最合适的.

2 关于BeautifulSoup

BeautifulSoup是一个帮助程序员快速从网页中提取有效数据的工具,它的api对新手开发人员非常友好,而且它还可以很好地处理格式错误的标记。但是,在大多数情况下,单独依靠BeautifulSoup本身无法完成任务,你需要使用另一个包(如urlib2)或requests来帮助你下载网页,然后就可以使用BeautifulSoup来解析html源代码。BeautifulSoup的文档非常全面,你可以在那里得到很多参考示例,并迅速学会如何使用它。

BeautifulSoupPython 2Python 3上运行良好,因此兼容性不成问题,下面是BeautifulSoup的一个代码示例,正如你所看到的,它非常适合初学者。

代码语言:javascript复制
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')

for link in soup.find_all('a'):
    print(link.get('href'))
# http://example.com/elsie
# http://example.com/lacie
# http://example.com/tillie

3 关于Scrapy

Scrapy是一个web爬行框架,开发人员可以编写代码来创建spider,它定义了某个站点(或一组站点)将如何被爬行。最大的特点是它建立在Twisted(一个异步网络库)上,所以Scrapy是使用非阻塞(又称异步)代码来实现并发的,这使得sspider的性能非常好。

对于那些不知道什么是异步的人,这里有一个简单的解释。

当你同时做某件事时,你要等到它完成后再去做另一件事,这是同步。当你异步执行某个任务时,可以在它完成之前转到另一个任务,这是异步。

ScrapyPython 2Python 3上也能很好运行,因此兼容性也不成问题。它内置了使用xpath表达式和css表达式从html源提取数据的支持。

4 如何选择在BeautifulSoup和Scrapy之间选择?

存在这两个python web抓取工具的原因是为了执行不同需求下的任务。BeautifulSoup只用于解析html和提取数据,Scrapy用于下载html、处理数据和保存数据。

当你比较BeautifulSoup和Scrapy,找出哪个是最适合你的项目,你应该考虑很多因素。

4.1 学习曲线

BeautifulSoup非常容易学习,你可以快速使用它来提取你想要的数据,在大多数情况下,你还需要一个下载程序来帮助你获取html源代码,强烈建议使用requests包而不是内置Python库中的urllib2来实现此功能。

由于Scrapy不仅处理内容提取,还处理许多其他任务,如下载html,因此Scrapy的学习曲线要陡峭得多,因此需要阅读一些Scrapy教程或Scrapy文档来了解它的工作原理,并努力成为一名Scrapy高手。

如果你是一个新手,没有太多编程经验,想完成一个小项目,BeautifulSoup应该是你较好的选择,因为它比较容易上手。

4.2 周边生态

以前很少有人在比较web抓取工具时讨论过这个问题。想想为什么人们喜欢使用Wordpress来构建CMS(开源内容管理系统)而不是其他框架,关键是生态系统。如此多的主题,插件可以帮助人们快速建立一个符合要求的CMS。

Scrapy有很多相关的项目,插件开源在Github上,还有很多关于stackoverflow的讨论可以帮助你解决潜在的问题。例如,如果你想要在你的爬虫项目中使用代理,你可以找到项目scrapy-proxies,利用代理帮助你从列表中使用随机代理发送HTTP请求,完成这些,你只需要改一些配置。这就是生态带来的好处,不用从头造轮子.

4.3 可扩展性

Scrapy的体系结构设计良好,可以方便地开发自定义中间件或管道来添加自定义功能。因此scrapy创建的项目可以既健壮又灵活。在开发了几个棘手的项目之后,你将受益于架构和它的设计,因为很容易从现有的Scrapy爬虫项目迁移到另一个。

所以,如果你的项目很小,逻辑不是很复杂,你想快速完成工作,你可以使用BeautifulSoup简单的实现项目。如果你的项目需要更多的定制,比如代理、数据管道,那么你可以选择Scrapy

4.4 性能

有了Scrapy,爬虫项目可以同时发出许多请求,所以你需要设置下载延迟(download_delay),在大多数情况下,以避免被禁止爬取数据,从而网页可以被迅速抓取。然而,BeautifulSoup并没有这个特点,所以很多人说BeautifulSoup很慢。实际上,这是错误的,你可以导入multiprocessing来加快整个进程,说道这里,许多使用BeautifulSoup的人可能不知道如何使用multiprocessing

所以如果你想开发一个高效并发的爬虫项目,可以在短时间内抓取许多数据集,Scrapy可以节省你很多时间。如果你不是有经验的python开发人员,那么在这里不应该选择BeautifulSoup

5 总结

哪一个更好?没有可靠的答案,答案很大程度上取决于实际情况。下面是一个快速参考表。

Scrapy vs BeautifulSoup

简而言之,如果你在编程方面没有太多经验,项目非常简单,那么BeautifulSoup可以是你的选择。如果你想要一个更强大、更灵活的网络爬虫,或者你确实有编程经验,那么Scrapy绝对是这里的赢家。

6 参考资料

  • Scrapy vs BeautifulSoup
  • Scrapy Doc
  • Beautiful Soup Doc
  • 其他文章
    • BeautifulSoup4 vs Scrapy
    • When should you use Scrapy over BeautifulSoup?

0 人点赞