[Python] [爬虫] 批量政府网站的招投标、中标信息爬取和推送的自动化爬虫

您所在的位置:网站首页 江苏招标投标服务公共平台 [Python] [爬虫] 批量政府网站的招投标、中标信息爬取和推送的自动化爬虫

[Python] [爬虫] 批量政府网站的招投标、中标信息爬取和推送的自动化爬虫

2024-07-17 17:59| 来源: 网络整理| 查看: 265

 

目录

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、dataPusher

 HTML引擎,可以生成HTML文件

从数据库获取数据,更新推送标识

格式化邮件地址

邮件推送

8爬虫日志spiderLog日志写入到文本,包含普通信息、警告、错误、异常等9调度引擎scheduleEngine构造代理引擎、独立代理引擎、验证引擎、网页爬取引擎、数据推送引擎,然后统一调度,完成推送10日志监控log_record爬虫执行结果写入到数据库的日志表中11代理池更新rebuild_proxy清空代理池,重新爬取代理

 

在爬虫项目下有两个文件夹(可自己修改),用于存储推送文件和关键词库,分别为:

推送文件:..\history_file

关键词库:..\keyword_file\keyword.txt

其中,关键词库存储了需要提取的关键词,用于筛选爬取的数据。

同时,有一个Lib目录,包含了自写库Console_Color,可以自己添加写好的库。

自写库:..\Lib

4.Environment and Configuration

Environment: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.Automation

Linux自动化方式:crontab(不推荐,测试了很多次,会出现各种问题,未解决)

Windows自动化方式:任务计划程序(从运行中打开,快捷键为 win + R,输入 taskschd.msc),推荐在爬虫项目下生成两个bat文件,分别用于控制调度引擎和代理池重建,填入参数分别为:

python scheduleEngine.py python rebuild_proxy.py

然后在任务计划程序中,输入对应的参数,并且在触发器里可以设置启动条件,即可实现自动化。

6.Conclusion

文件目录一览:

爬虫源码之后会放在GitHub上,具体的配置和操作会在之后的模块详解中说到,不定期更新爬虫,有些代码块比较冗余需要优化,最近有想做成分布式,然后搞点数据挖掘方法,但数据量并不是很大,作罢。最后说一句,Python大法好。

2018.11.9更新,GitHub地址:https://github.com/Asada2142/Python_Spider



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3