互联网分布式爬虫技术之爬虫框架pyspider和scrapy的区别和对比分析

目录

1. 功能特点

2. 使用难度

3. 社区支持

4. 活跃度和受欢迎程序


图片

更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

接下来的一段时间我将总结关于【Python进阶系列】的一系列开发技术知识点的分享文章,主要为初学者从零基础到进阶再到高级和项目实战,结合目前最新的Python版本3.12来做代码示例的样式,并同时也会标注出与Python2的一些异同点。

然后关于Python的Web开发、爬虫开发、操作系统开发、网络安全开发应用领域这块,可以分别参考我的公众号CTO Plus【Flask进阶系列】、【Django进阶系列】、【DRF进阶系列】、【互联网分布式爬虫系列】和【网络安全系列】的内容,敬请关注,欢迎交流。

图片

以下是【Python3进阶系列】的部分内容

图片

Python是一种功能强大且灵活的编程语言,广泛应用于各个领域。在Python中,有许多优秀的爬虫框架可供选择,其中最受欢迎的包括pyspider和scrapy。

通过前面两篇文章对这两个框架的详细介绍和使用《互联网分布式爬虫技术之Scrapy网络数据采集的利器框架简介和使用(文末加群)》和《互联网分布式爬虫技术之pysipder框架使用详解与实战案例(文末加群)》,我们已经大概知道这两个框架的一些特点,那么,本篇文章我将对这两个框架进行对比,以帮助读者选择适合自己需求的爬虫工具。

1. 功能特点

pyspider是一个强大的分布式爬虫框架,它具有简单易用、可视化界面(WebUI)、支持JavaScript渲染等特点。pyspider使用Python 3编写,支持异步IO,可以同时处理多个任务,适用于高并发的爬取需求。它还提供了强大的数据处理和存储功能,可以将数据保存到数据库中,或者导出为各种格式的文件。

scrapy是一个成熟且功能丰富的爬虫框架,它使用Python编写,支持异步IO和多线程,并提供了强大的数据处理和存储功能。scrapy具有良好的可扩展性,可以通过编写插件来增加功能。它还提供了强大的调度器和去重器,可以高效地管理爬虫任务,并避免重复爬取。

可以在pyspider中的WebUI进行爬虫的编写和调试;Scrapy采用代码、命令行操作的方式,实现可视化需对接Portia。

pyspider 支持使用 PhantomJS 对JavaScript 渲染页面的采集;Scrapy 需对接Scrapy-Splash组件。

pyspider 内置了 PyQuery作为选择器;Scrapy对接了 XPath、CSS选择器和正则匹配。

pyspider 扩展性相对来说比较弱;Scrapy 模块之间耦合度低,扩展性强,如:可以通过对接 Middleware、Pipeline 等组件实现更强功能。

2. 使用难度

pyspider相对于scrapy来说,更加简单易用。它提供了直观的可视化界面,可以通过简单的拖拽和配置来创建爬虫任务。同时,pyspider还提供了丰富的示例代码和文档,可以帮助用户快速上手。

scrapy相对于pyspider来说,更加复杂一些。它需要用户编写一些额外的代码来定义爬虫的逻辑和数据处理过程。虽然scrapy提供了详细的文档和教程,但对于初学者来说,可能需要花费一些时间来学习和理解。

3. 社区支持

scrapy是一个非常成熟的爬虫框架,拥有庞大的用户社区和活跃的开发者社区。用户可以在社区中获取到大量的示例代码、教程和解决方案。同时,scrapy还有许多第三方库和插件可供选择,可以帮助用户扩展功能。

pyspider相对于scrapy来说,社区规模较小。尽管如此,pyspider仍然有一些活跃的用户社区和开发者社区,用户可以在社区中获取到一些有用的资源和支持。

更多关于Python的相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。

图片

4. 活跃度和受欢迎程序

scrapy 48.9k stars

图片

pyspider 16.1k stars

图片

截止到本文当前时间(2023年10月19日18:03:03)scrapy在github上拥有48.9k stars,更新也比较频繁,相比于pyspider的16.1k stars还是比较受欢迎的,而且pyspider也年久失修。

综上所述,pyspider和scrapy都是优秀的Python爬虫框架,具有各自的特点和优势。如果你是初学者或者对爬虫任务的复杂度要求不高,可以选择pyspider。如果你对爬虫任务有更高的要求,或者需要更多的自定义功能和扩展性,可以选择scrapy。无论选择哪个框架,都需要根据自己的需求和技术水平做出合适的选择,并在使用过程中遵守相关法律法规,尊重网站的权益和用户的隐私。

最后就是本人自己的选择态度:推荐大家使用scrapy。

总的来说,pyspider 更加便捷,Scrapy扩展性更强,如果要快速实现爬取优选 pyspider,如果爬取规模较大、反爬机制较强,优选 scrapy。

Python专栏
https://blog.youkuaiyun.com/zhouruifu2015/category_5742543

更多精彩,关注我公号,一起学习、成长

图片

CTO Plus

一个有深度和广度的技术圈,技术总结、分享与交流,我们一起学习。 涉及网络安全、C/C++、Python、Go、大前端、云原生、SRE、SDL、DevSecOps、数据库、中间件、FPGA、架构设计等大厂技术。 每天早上8点10分准时发文。

306篇原创内容

公众号

标准库系列-推荐阅读:

最后,不少粉丝后台留言问加技术交流群,之前也一直没弄,所以为满足粉丝需求,现建立了一个关于Python相关的技术交流群,加群验证方式必须为本公众号的粉丝,群号如下:

图片

原文:互联网分布式爬虫技术之爬虫框架pyspider和scrapy的区别和对比分析

Cola是一个分布式爬虫框架,用户只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。pip install pyyaml安装下载或者用git clone源码,假设在目录/to/pth/cola,将该路径添加到Python path中。一种简单的方法是在site-packages中添加pth文件。site-packages因系统而异,如果是windows,假设python 装在C:\python27,那么就是C:\python27\Lib\site-packages;如果是linux,那么应该是/usr/local /lib/pythonX.X/dist-packages。在site-packages下新建一个cola.pth文件,里面写上路径:/to/path/cola。Cola目前自带了若干个爬虫,在项目根目录下的contrib中。下面就wiki为例,分别说明如何在单机分布式环境下运行。依赖无论是维基百科还是新浪微博的实现,数据都存放在MongoDB中,所以要确保MongoDB的安装。在wiki下的wiki.yamlweibo下的weibo.yaml中可以配置MongoDB的主机端口。维基百科新浪微博实现依赖于下面的几个包:mechanizepython-dateutilBeautifulSoup4mongoenginersa(仅新浪微博需要)可以使用pip或者easy_install来安装。单机模式单机模式非常简单,只需运行contrib/wiki/__init__.py即可。cd /to/path/cola/contrib/wiki python __init__.py要运行新浪微博的爬虫,需要在weibo.yaml中配置登录的用户名密码。这里要注意,要保证这个用户名密码在登录时不需要验证码。停止则需运行stop.py,注意不能通过直接杀死进程来停止,否则会导致cola非法关闭。 如果非法关闭,确保cola不在运行的情况下,则可以运行stop.py来恢复。但无论如何,都不推荐非法关闭,否则可能遇到不可预知的错误。python stop.py分布式模式首先需要启动cola mastercola workers。分别运行根目录下bin中的start_master.pystart_worker.py启动cola master:cd /to/path/cola python bin/start_master.py --data /my/path/data如果不指定--data,那么数据文件会放置在项目根目录下的data文件夹中。启动cola worker:python bin/start_worker.py --master <master ip address> --data /my/path/data--data选项同master。如果不指定master,会询问是否连接到本机master,输入yes连接。最后使用bin下的coca.py来运行指定的Cola job:python bin/coca.py -m <master ip address> -runLocalJob /to/path/cola/contrib/wiki-runLocalJob选项是要运行的job所在文件夹的绝对路径。输入命令后,该job会被提交到Cola集群来运行。停止Cola Job或集群停止整个集群,则可以运行:python bin/coca.py -m <master ip address> -stopAll而停止一个Job,则需要查询得到Job的名称:python bin/coca.py -m <master ip address> -showRunningJobsNames得到名称后,再运行:python bin/coca.py -m <master ip address> -stopRunningJobByName <job name>基于Cola实现的爬虫基于Cola实现的爬虫位于contrib/目录下。目前实现了四个爬虫:wiki:维基百科。weibo:新浪微博爬虫。从初始用户出发,然后是其关注粉丝,依次类推,抓取指定个数的新浪微博用户的微博、个人信息、关注粉丝。其中,用户微博只获取了内容、赞的个数、转发评论的个数等等,而没有具体去获取此微博被转发评论的内容。generic(unstable):通用爬虫,只需配置,而无需修改代码。目前Cola实现了一个抽取器(cola/core /extractor),能够从网页正文中自动抽取主要内容,即去除类似边栏底脚等内容。但是,此抽取器目前准确度还不够,效率也不够高,所以需要谨慎 使用。weibosearch(unstable):新浪微博搜索的爬虫。这个爬虫使用 cola.core.opener.SpynnerOpener,基于spynner实现了一个Opener能够执行JavaScriptAjax代 码。目前这个爬虫存在的问题是:新浪微博可能会将其识别成机器人,因此有可能会让输入验证码。wikiweibo之前有所提及。主要说明genericweibosearch。对于generic来说,主要要修改的就是配置文件:job:   patterns:     - regex: http://blog.sina.com.cn/$       name: home       store: no       extract: no     - regex: http://blog.sina.com.cn/s/blog_.       name: article       store: yes       extract: yes其中,regex表示要匹配的url的正则表达式;name是正则匹配的名称;store为yes时是存储这个网页,no为不存储;extract表示是否自动抽取网页正文,只有当store为yes的时候,extract才有作用。对于weibosearch,其使用了spynner来执行JavaScriptAjax代码。所以需要确保以下依赖的安装:PyQt4(>=4.4.3)spynner如果你觉得可以基于cola实现一个比较通用的第三方爬虫,比如说腾讯微博等等,欢迎将此爬虫提交到contrib/中。编写自定义Cola Job见wiki编写自定义Cola Job。架构原理在Cola集群里,当一个任务被提交的时候,Cola MasterWorker会分别启动JobMasterJobWorker。对于一个Cola Job,当JobWorker启动完成后,会通知JobMaster,JobMaster等待所有JobWorker启动完成后开始运行Job。在一个 Cola Job启动时,会启动一个消息队列(Message Queue,主要操作是putget,worker抓取到的对象会被put到队列中,而要抓取新的对象时,只要从队列中取即可),每个 JobWorker上都存在消息队列节点,同时会有一个去重模块(bloom filter实现)。Cola还不够稳定,目前会处于持续改进的状态。且Cola还没有在较大规模的集群上测试,但是接下来我会把Cola应用到新项目中,并逐步完善。也希望大家也能给我反馈,并帮助改进。Roadmap0.1版本正式推出前不会再增加新的功能了,主要目标让Cola更加稳定,并且提高cola/core/extractor的性能精确度,完善contrib/genericcontrib/weibosearch。0.2版本计划:实现一个web接口,可以查看运行的cola job以及运行情况简化安装,支持easy_install或者pip安装。增加解决依赖库安装的机制。0.3版本计划:增加一个统一持久化抽象,支持保存到关系型数据库,MongoDB,文件系统,HDFS等等。0.4版本计划:支持Python 3 标签:Cola
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveRocket

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值