首页 > > > 一个极为简洁的Python爬虫框架
更新--案例讲解框架用法:玩点好玩的--100行代码抓取NBA全部球员的全部赛季数据
=============================================================
虽然不是专业的爬虫工程师,但作为一个Pythoner,一直对爬虫情有独钟。
Python有很多爬虫框架,比如Scrapy、PySpider等。我不是一个特别喜欢用轮子的人,所以根据有限的爬虫知识,结合其他框架架构,自己造了一个用起来特别顺手的轮子:PSpider,也加深了自己对爬虫框架、多线程、多进程等概念的理解。
PSpider框架的Github地址:xianhu/PSpider · GitHub,欢迎大家拍砖点赞。
从开始设计这个框架,就坚持“简洁”的原则,尽量不去使用一些高级的第三方库,同时保证代码量也比较少。所以这个框架完全可以当做自己练手写爬虫框架的参考。

先说一下PSpider都帮我做过哪些抓取工作吧。
从开始着手PSpider到现在,也有将近两年的时间了。两年时间内,几乎每周都会对其进行修改,包括添加功能、修改Bug、更改接口等,以应对不同的应用场景。到了最近半年PSpider才开始慢慢趋于成型和稳定,并应用在公司实际项目中。
PSpider的代码量非常少,只看代码的话都不足700行。当然另外还有相当一部分的注释和docstring,下图是这个框架代码方面的一些概览:

这里简单说一下框架的结构和功能,有什么不明白的,可以自己去读一下源码,应该很容易理解。PSpider框架主要有三个Module,分别为utilities、instances和concurrent。
除了三个目的性比较强的模块之外,该框架还定义了比较详细的debug日志规范,同时使用了其他一些Python中的技巧(比如装饰器、动态类等)。能作为Python爬虫框架的同时,也是比较好的Python入门资源。更多功能、配置、参数等,可以查看代码学习。
框架的主要目的就是为了让爬虫工程师在编写爬虫时更专注于构造合理的request、解析网页以及存储网页,而不是浪费时间在如何写工具函数、如何进行线程调度、如何进行进程通讯、如何保证线程、进程正常退出等等。没有哪个框架十全十美,也没有哪个框架完全通用,顺手、稳定才是硬道理。这个框架目前还不够完善,我还会不断思考、更新它,基本会保持在每周更新一次。大家有什么功能性建议,或者在架构上有什么其他好的想法,可以给我留言或者在github上提Issues、Pull requests等,我会积极考虑大家建议的。
下一步主要的计划是改写为分布式的爬虫,提高抓取效率。
这里贴两张测试流程中的日志输出:


=============================================================
作者主页:笑虎(Python爱好者,关注爬虫、数据分析、数据挖掘、数据可视化等)
作者专栏主页:撸代码,学知识 - 知乎专栏
作者GitHub主页:撸代码,学知识 - GitHub
欢迎大家拍砖、提意见。相互交流,共同进步!
==============================================================
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/756/viewspace-3121203/ ,如需转载,请注明出处,否则将追究法律责任。