Python学习之Scrapy教程

介绍:

这是我的Scrapy教程系列的第一篇文章,在这个Scrapy教程中,我将讨论Scrapy,BeautifulSoup的特性,比较它们,并帮助您决定哪个更适合您的项目。

谈论BeautifulSoup

BeautifulSoup是一个帮助程序员快速从网页中提取有效数据的工具,它的API对新手开发者非常友好,并且它也可以很好地处理格式错误的标记。但是,在大多数情况下,仅靠BeautifulSoup无法完成工作,您需要使用另一个软件包(例如urlib2requests帮助您下载网页),然后您可以使用BeautifulSoup来解析HTML源代码文档BeautifulSoup非常全面,您可以在那里获得大量示例,并快速学习如何使用它。

BeautifulSoup在Python 2和Python 3上运行良好,因此兼容性不会成为问题,下面是一个代码示例BeautifulSoup,如您所见,它对初学者非常友好。

from  bs4  import  BeautifulSoup 
soup  =  BeautifulSoup html_doc  'html.parser' 

 链接  find_all 'A' ):
    打印链接获得'HREF' ))
#http://example.com/elsie 
#http://example.com/lacie 
#http://example.com/tillie

谈论Scrapy

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

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

当您同步执行某项操作时,您需要等待它完成后才能继续执行其他任务。当您异步执行某些操作时,可以在完成之前转到其他任务。

Scrapy在Python 2和Python 3上也可以正常工作,所以兼容性不会成为问题。它内置了对使用XPath表达式和CSS表达式从HTML源提取数据的支持。

你应该选择哪一个?

这两个Python网页抓取工具是为了完成不同的工作而创建的。BeautifulSoup仅用于解析HTML和提取数据,Scrapy用于下载HTML,处理数据并保存它。

当你比较BeautifulSoupScrapy找出什么是最适合你的项目时,你应该考虑很多因素。

学习曲线

BeautifulSoup很容易学习,你可以快速地使用它来提取你想要的数据,在大多数情况下,你还需要一个下载器来帮助你获得HTML源代码,强烈建议使用Requests包而不是urllib2从内置的python库来实现这个功能。

既然Scrapy不仅处理内容提取,而且还有很多其他任务,比如下载HTML,学习曲线Scrapy更加陡峭,您需要阅读一些Scrapy教程或Scrapy Doc以了解它如何工作,并努力成为Scrapy专家。

如果你是一位新手开发者,没有太多的编程经验并想完成一项小型工作,BeautifulSoup可能是你的选择,因为它不太可能让你失望。

生态系统

在比较网页抓取工具时,很少有人谈论过这个问题。想想为什么人们喜欢使用Wordpress来构建CMS而不是其他框架,关键是ecosystem如此多的主题,插件可以帮助人们快速构建符合要求的CMS。

Scrapy有很多相关的项目,在Github等开源网站上的插件,以及关于StackOverflow的许多讨论可以帮助您解决潜在的问题。例如,如果您想在您的蜘蛛项目中使用代理,可以scrapy-proxies使用列表中的随机代理来检查项目帮助您发送HTTP请求。所有你需要的只是改变一些设置。

可扩展性

该体系结构Scrapy设计良好,您可以轻松开发定制中间件或管道来添加自定义功能。您的Scrapy项目既强大又灵活。在开发了几个Scrapy项目后,您将从架构中受益,并喜欢它的设计,因为从现有Scrapy蜘蛛项目迁移到另一个项目非常容易。

所以如果你的项目很小,逻辑不是很复杂,而且你想尽快完成工作,你可以用它BeautifulSoup来保持你的项目简单。如果你的项目需要更多的定制,如代理,数据管道,那么Scrapy这里可能是你的选择。

性能

与此同时Scrapy,蜘蛛可以同时发送很多请求,所以download_delay在大多数情况下需要设置以避免被禁止,网页可以被快速抓取。但是,BeautifulSoup没有这个功能,所以很多人都说这BeautifulSoup很慢。实际上,这是错误的,你可以通过导入multiprocessing来加速整个进程,但是我必须说很多人使用BeautifulSoup可能不知道如何使用multiprocessing

因此,如果您想开发一种可以在短时间内抓取许多数据集的高效蜘蛛,可以为Scrapy您节省大量时间。如果你没有经验的Python开发人员,那么BeautifulSoup不应该在这里选择你的选择。

结论

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

骨架BeautifulSoupScrapy
学习曲线非常容易学习,对初学者友好学习曲线Scrapy更加陡峭,您需要阅读一些Scrapy教程或Scrapy Doc才能开始,并努力成为Scrapy专家。
生态系统没有太多相关的项目或插件许多相关项目,开源网站上的插件(如Github)以及关于StackOverflow的许多讨论可以帮助您解决潜在的问题。
可扩展性不太容易扩展该项目您可以轻松开发自定义中间件或管道来添加自定义功能,便于维护。
性能您需要导入multiprocessing才能使其运行更快非常高效的网页可以在短时间内被抓取,另一方面,在很多情况下,您需要设置download_delay以避免被禁止。

总之,如果你没有太多的编程经验,这项工作是一个非常简单的项目,那么BeautifulSoup你可以选择。如果你想要一个更强大和灵活的网络爬虫,或者你确实有一些编程经验,那么Scrapy这里肯定是赢家.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值