前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scrapy vs BeautifulSoup

Scrapy vs BeautifulSoup

作者头像
别打名名
发布2019-12-23 15:40:04
2K0
发布2019-12-23 15:40:04
举报
文章被收录于专栏:小白AI.易名小白AI.易名

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?
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 别打名名 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 简介
  • 2 关于BeautifulSoup
  • 3 关于Scrapy
  • 4 如何选择在BeautifulSoup和Scrapy之间选择?
    • 4.1 学习曲线
      • 4.2 周边生态
        • 4.3 可扩展性
          • 4.4 性能
          • 5 总结
          • 6 参考资料
          相关产品与服务
          消息队列 TDMQ
          消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档