python多线程框架_拥有属于自己的Python爬虫框架--练习编写多线程、协程爬虫框架!...

大概两个月前,我把自己维护的一个“极为简洁”的Python爬虫框架PSpider放在了Github,并在专栏中做了简单介绍:一个极为简洁的Python爬虫框架。没想到两个月的时间,“竟然”收到了超过300的star,让我很意外,所以我也一直在尽量改进这个框架:xianhu/PSpider。

写这个框架的初衷,主要有以下几点:熟悉Python爬虫框架原理和逻辑,而不是只会用别人的框架。

练习Python的各种语法,包括多线程、多进程、协程、装饰器、元类、多继承等。

尝试自己去维护一个开源框架,熟悉Git用法等。虽然框架不牛,但还是挺锻炼自己的。

如果大家有兴趣可以Fork代码之后仔细读一遍,结合我的一些说明,应该不难理解框架其中的逻辑。当然也很欢迎大家star?。对于协程部分,如果没有协程基础,建议转到:理解Python中的异步IO和协程(Coroutine),并应用在爬虫中

PSpider框架的特性和功能

首先说一下PSpider框架的特性和功能:支持两种爬虫框架模型:多线程爬虫框架 和 协程爬虫框架(利用aiohttp库)。写两个模型的目的,也是为了练习Python的高级特性,以及爬虫的高级用法。

定义了爬虫工作中通用的函数、类等,比如URLFilter,make_random_useragent等。

尽量考虑爬虫工作的各个场景,尽量使得使用者只专注业务(解析、反爬等),而不用考虑其他事情,比如如何线程同步、如何设计数据流等。

爬虫框架虽然有两种模型,但是代码量较少(6、7百行左右),容易阅读、理解和扩展。

下一步计划再加一种爬虫框架模型:分布式爬虫。

PSpider框架的基本结构和原理这里再一次简单说一下框架的原理和逻辑,有什么不明白的,可以自己去读一下源码,应该很容易理解。PSpider框架主要有这么几个模块:utilities模块:主要定义了一些工具函数、工具类等,即抽象出爬虫工作中的具体流程、通用流程等做成函数或者类,目的是为了节省爬虫工程师的时间。比如定义UrlFilter类用于过滤Url,定义make_random_useragent随机获取UA值。

instances模块:主要定义了多线程爬虫模型中用到的Fetcher、Parser、Saver三个工作类,即爬虫在工作过程中真正干活的流程。使用框架时,一般都需要继承并改写上边的三个类,特别是Parser类。即三者都需要定制化,框架在这一步还做不到完全通用。

concurrent模块:定义多线程爬虫框架(concur_threads.py)和协程爬虫框架(concur_async.py),用于爬虫过程中线程和协程的合理调度、数据共享、状态监控等。该模块是框架的核心模块。

如果把爬虫框架比作一个工厂,则对于多线程爬虫框架,concurrent模块定义多个车间并做相应的调度、信息同步等,instances模块定义每个车间中工人的工作流程,utilities模块定义一些生产过程需要的工具、机器等。Fetcher类根据url进行简单的抓取,并返回抓取内容。Parser类根据抓取内容进行解析,生成待保存的Item及待抓取的Url列表。Saver类进行Item的保存。(具体可查看上文中的流程图)。

具体的用法,大家可以参考Github上的说明文档。有什么问题,可以随时和我沟通,非常非常欢迎大家根据自己的业务提出需求,甚至提出代码合并请求等。

另外,代码部分有一些demos_*的文件夹,是一些框架使用的demo,包括当当图书信息抓取、豆瓣电影抓取、NBA球员信息抓取等。由于PSpider框架的不断变化,这里不保证每个Demo都还能直接调用,但是应该稍微修改就能使用。如果你希望分享你自己的Demo,也欢迎大家提交Pull Request。

再一次放上爬虫框架代码地址:xianhu/PSpider

=============================================================

欢迎大家拍砖、提意见。相互交流,共同进步!

==============================================================

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值