0基础,怎么做个Python爬虫框架?

Posted 千锋深圳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0基础,怎么做个Python爬虫框架?相关的知识,希望对你有一定的参考价值。


Tips:预约千锋免费试听课程,点击文末“阅读原文”进行报名!

0基础,怎么做个Python爬虫框架?


众所周知,Python确实非常火,语言功能及其强大,可以干很多很多事情,而且也是数据分析,机器学习,人工智能第一语言。 目前好的Python程序员薪水非常高,众多BAT企业对其需求量也大。

但是,零基础能不能学好Python? 特别是爬虫技术?

毕竟,Python有很多爬虫框架,比如Scrapy、PySpider等。

今天,小千就运用爬虫知识,结合其他框架架构,造一个用起来特别顺手的轮子: PSpider,也帮助大家加深对爬虫框架、多线程、多进程等概念的理解。

0基础,怎么做个Python爬虫框架?


0基础,怎么做个Python爬虫框架?


从开始设计这个框架,就坚持“简洁”的原则,尽量不去使用一些高级的第三方库,同时保证代码量也比较少。

所以这个框架完全可以当做小伙伴们用来练手写爬虫框架的参考。
0基础,怎么做个Python爬虫框架?
先说一下PSpider都能做哪些抓取工作。
  • 抓取国内某融资平台网站的全部创业公司信息超过10万条
  • 抓取国内某科技类新闻网站的全部新闻数据7万条左右
  • 抓取某猎头公司的全部内部数据几十万条左右(数据是什么你应该懂,一直没公开)
  • 抓取国内四大主流手机应用市场的全部信息,并以天为单位进行更新,每天20万条左右
  • 抓取新浪微博、搜狗微信公众号等数据,几百万量级
  • 抓取中国裁判文书网上的法律判决文书,1000万条左右
  • 抓取教育类APP的题库数据,包括题目、答案、解析,20万条左右
  • 还抓取过很多小网站、小应用,这里就不一一列举了


PSpider的代码量非常少,只看代码的话都不足700行。 当然另外还有相当一部分的注释和docstring,下图是这个框架代码方面的一些概览:
0基础,怎么做个Python爬虫框架?
这里简单说一下框架的结构和功能,有什么不明白的,可以自己去读一下源码,应该很容易理解。PSpider框架主要有三个Module,分别为utilities、instances和concurrent。

utilities模块:主要定义了一些工具函数、工具类等,即抽象出爬虫工作中的具体流程、通用流程等做成函数或者类,目的是为了节省爬虫工程师的时间。比如定义UrlFilter类用于过滤Url,定义params_chack装饰器用于检查函数输入参数等。该模块中的函数较多,大概有15个左右,具体可以去代码中查看,函数命名都比较规范,注释也都还算详细。

instances模块:主要定义了Fetcher、Parser、Saver三个工作类,即爬虫在工作过程中真正干活的流程。如果把爬虫框架比作一个工厂,则concurrent模块定义多个车间并做相应的调度、信息同步等,instances模块定义每个车间中工人的工作流程,utilities模块定义一些生产过程需要的工具、机器等。使用框架时,一般都需要继承并改写上边的三个类,特别是Parser类,即三者都需要定制化,框架在这一步还做不到完全通用。Fetcher类根据url进行简单的抓取,并返回抓取内容。Parser类根据抓取内容进行解析,生成待保存的Item及待抓取的Url列表。Saver类进行Item的保存。(具体可查看上文中的流程图)。另外,三者都不需要改写每个类中的work函数,该函数会充分考虑流程中会遇到的问题,并作出最正确的“回应”。


concurrent模块:主要定义了一个线程池,以及一个进程、线程组合池,用于爬虫过程中线程/进程安全合理调度、进程线程之间数据共享同步等。如果解析类比较简单,不太消耗cpu资源,可以使用线程池ThreadPool,它会根据参数生成相应个数的抓取、解析、保存子线程。但是如果解析类比较复杂,是一个cpu密集型任务,由于Python中GIL的问题,如果单纯的使用多线程,可能效率会比较低,这时可以考虑使用ProcessPool,它会在主进程中开启多个抓取线程,而解析过程则放到不同的进程中,提高爬虫抓取、解析的效率。另外,该模块定义了一个监视线程,在爬虫工作过程中不断监视任务状态。

除了三个目的性比较强的模块之外,该框架还定义了比较详细的debug日志规范,同时使用了其他一些Python中的技巧(比如装饰器、动态类等)。能作为Python爬虫框架的同时,也是比较好的Python入门资源。更多功能、配置、参数等,可以查看代码学习。
这里贴两张测试流程中的日志输出:
0基础,怎么做个Python爬虫框架?
0基础,怎么做个Python爬虫框架?


0基础,怎么做个Python爬虫框架?


框架的主要目的就是为了让爬虫工程师在编写爬虫时更专注于构造合理的request、解析网页以及存储网页。

而不是浪费时间在如何写工具函数、如何进行线程调度、如何进行进程通讯、如何保证线程、进程正常退出等等。

没有哪个框架十全十美,也没有哪个框架完全通用,顺手、稳定才是硬道理。
当然,以上这个框架目前也还不够完善,要继续去不断思考、更新它,在这里,各位小伙伴们有什么功能性建议,或者在架构上有什么其他好的想法,可以下面留言哦~
下一步主要的计划是改写为分布式的爬虫,提高抓取效率。

0基础,怎么做个Python爬虫框架?


千锋深圳Python培训课程内容不断升级,推出最贴近企业实战的机器学习案例,例如人脸识别,手写数字识别,汽车车牌号识别等。


千锋深圳Python培训在做好前期企业调研之后,将潮流技术完美融入课程体系,实用性强,注重理论更重实践,结合项目真实工作流程,进行项目实训!


0基础,怎么做个Python爬虫框架?


另外,如果你对Python技术感兴趣,想掌握过硬的软件测试技术,欢迎来千锋深圳Python培训免费试学2周,课程能不能学到东西,能不能学好学会,亲身体验试学过后自然清楚明了!



0基础,怎么做个Python爬虫框架?


充实自己,就现在

来千锋

学最新技术、拿行业最高薪


即学即用,高薪就业不难


扫码客服小姐姐,获取免费学习资料


▼▼▼




-参考资料-
知乎等。

千锋深圳校区


千锋教育一直秉承“用良心做教育”的理念,全力打造互联网技术型研发人才服务优质平台。2013年初,千锋深圳IT培训作为千锋教育第一家分公司,强势进驻深圳。校区位于深圳西部硅谷,占地面积4000多平方。在1、4、5、6楼均有教室授课。拥有全国的专业教学以及就业保障团队,做到了毕业学员业内高薪,成为学员信赖的IT培训机构。

以上是关于0基础,怎么做个Python爬虫框架?的主要内容,如果未能解决你的问题,请参考以下文章

小白学 Python 爬虫(40):爬虫框架 Scrapy 入门基础对接 Selenium 实战

小白学 Python 爬虫(37):爬虫框架 Scrapy 入门基础 Spider Middleware

Python编程基础之(五)Scrapy爬虫框架

Python 开发简单爬虫 - 基础框架

python基础 爬虫框架scrapy

Python爬虫基础--Scrapy框架的安装及介绍