[Python] [爬虫] 批量政府网站的招投标、中标信息爬取和推送的自动化爬虫 |
您所在的位置:网站首页 › 江苏招标投标服务公共平台 › [Python] [爬虫] 批量政府网站的招投标、中标信息爬取和推送的自动化爬虫 |
目录 1.Intro 2.Details 3.Theory 4.Environment and Configuration 5.Automation 6.Conclusion 1.Intro作为Python的拥蹩,开源支持者,深信Python大法好,每天不写点整个人就会萎靡不振,虽是GIS专业出身,除了干地信开发的老本行,也会用些奇技淫巧做点偷懒的活计。 通常以前用Python,都只是在ArcGIS中处理一些空间分析和地图操作的自动化任务,这回头一次写爬虫,也算是做过的一个比较完整的新型项目,编码耗时1个多月,维护耗时5个月,目前稳定在5.1版本,做过几次较大的更新,现在回头去看,就引发了一个问题:“这谁写的代码这么狗屎!哦好像是我自己写的.....”。 2.Details本来打算采用Scrapy作为爬虫的主要框架,但考虑到每个模块需要定制个性化操作,而且自己也想对其他爬虫库有更深入学习等原因(其实就是不会T-T),所以脱离了Scrapy框架,而采用了很多其他的爬虫库,比如urllib2、lxml(这个是真滴好用,虽然没正则强大,好用就对了)。 由于之前没有做爬虫的经验,所以这个项目的架构算是借鉴了几个比较成熟的爬虫项目,然后意淫出来的... 项目具体分为11个模块,其中包含了9个主要模块和2个扩展模块: IdModule NameRemark1验证模块主要模块2代理池主要模块3配置管理器主要模块4网页下载器主要模块5网页解析器主要模块6数据处理器主要模块7数据推送模块主要模块8爬虫日志主要模块9调度引擎主要模块10日志监控扩展模块11代理池更新扩展模块其中引用了20个库(不包含自己写的): IdLibrary NameRemark1urllib2网页抓取2requestsHTTP库3scrapy(就用到一处,打脸..)都懂的4lxml网页定位元素提取数据5pymongoMongoDB操作6selenium浏览器自动化测试框架7pyExcelerator(旧方法)excel文件处理8multiprocessing多进程9smtplib发邮件的(支持SMTP服务)10email构造邮件的(支持SMTP服务)11re正则表达式12socket套接字13gc垃圾回收14retry重试功能库15datetime时间处理16time时间模块17sys操作系统交互18random随机库19os操作系统交互20logging日志库使用Selenium时需要注意,一般推荐PhantomJS无头浏览器配合使用,也可以安装Chrome、FireFox等。 自己实现了一个库Console_Color,用于控制打印文本的颜色,本来想配合tqdm(进度条库)一起使用,非常惊艳,可是一想到是自动化的,没人看... 3.Theory受到Agile模式(敏捷开发)的影响,列了11个小周期来做Scrum,每个小周期就相当于一个模块,会根据任务量的大小逐一完成并通过测试,然后实现迭代,完成一次Sprint,而每个模块都会对外提供实现特殊功能的方法,最后通过调度引擎统一调配和管理。 IdModule NameFile NameDescribe1验证模块authentication验证数据库连接状态 验证网站连通性 验证代理有效性 2代理池proxyPool代理爬取 从数据获取随机代理 3配置管理器configManager存储爬虫相关配置信息,如数据库配置、网站URL、报头等4网页下载器pageDownloader获取网页源代码5网页解析器pageResolver解析网页源代码6数据处理器dataDisposer数据存储 数据删除 数据更新 数据清洗 获得数据库对象 7数据推送模块dataPusher_HTML、dataPusherHTML引擎,可以生成HTML文件 从数据库获取数据,更新推送标识 格式化邮件地址 邮件推送 8爬虫日志spiderLog日志写入到文本,包含普通信息、警告、错误、异常等9调度引擎scheduleEngine构造代理引擎、独立代理引擎、验证引擎、网页爬取引擎、数据推送引擎,然后统一调度,完成推送10日志监控log_record爬虫执行结果写入到数据库的日志表中11代理池更新rebuild_proxy清空代理池,重新爬取代理
在爬虫项目下有两个文件夹(可自己修改),用于存储推送文件和关键词库,分别为: 推送文件:..\history_file 关键词库:..\keyword_file\keyword.txt 其中,关键词库存储了需要提取的关键词,用于筛选爬取的数据。 同时,有一个Lib目录,包含了自写库Console_Color,可以自己添加写好的库。 自写库:..\Lib 4.Environment and ConfigurationEnvironment:Windows 7 及之后版本 or Windows Server 2008 及之后版本(Linux不推荐,会出现各种问题,未解决) Language:Python 2.7.14 IDE:Pycharm 2018.2.2、Robo 3T 1.2.1 DataBase:MongoDB 3.6.5 5.AutomationLinux自动化方式:crontab(不推荐,测试了很多次,会出现各种问题,未解决) Windows自动化方式:任务计划程序(从运行中打开,快捷键为 win + R,输入 taskschd.msc),推荐在爬虫项目下生成两个bat文件,分别用于控制调度引擎和代理池重建,填入参数分别为: python scheduleEngine.py python rebuild_proxy.py然后在任务计划程序中,输入对应的参数,并且在触发器里可以设置启动条件,即可实现自动化。 文件目录一览: 爬虫源码之后会放在GitHub上,具体的配置和操作会在之后的模块详解中说到,不定期更新爬虫,有些代码块比较冗余需要优化,最近有想做成分布式,然后搞点数据挖掘方法,但数据量并不是很大,作罢。最后说一句,Python大法好。 2018.11.9更新,GitHub地址:https://github.com/Asada2142/Python_Spider |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |