[Python] [爬蟲] 批量政府網站的招投標、中標信息爬取和推送的自動化爬蟲——脫離Scrapy框架(提供Github地址)

 

目錄

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個擴展模塊:

Id Module Name Remark
1 驗證模塊 主要模塊
2 代理池 主要模塊
3 配置管理器 主要模塊
4 網頁下載器 主要模塊
5 網頁解析器 主要模塊
6 數據處理器 主要模塊
7 數據推送模塊 主要模塊
8 爬蟲日誌 主要模塊
9 調度引擎 主要模塊
10 日誌監控 擴展模塊
11 代理池更新 擴展模塊

其中引用了20個庫(不包含自己寫的):

Id Library Name Remark
1 urllib2 網頁抓取
2 requests HTTP庫
3 scrapy(就用到一處,打臉..) 都懂的
4 lxml 網頁定位元素提取數據
5 pymongo MongoDB操作
6 selenium 瀏覽器自動化測試框架
7 pyExcelerator(舊方法) excel文件處理
8 multiprocessing 多進程
9 smtplib 發郵件的(支持SMTP服務)
10 email 構造郵件的(支持SMTP服務)
11 re 正則表達式
12 socket 套接字
13 gc 垃圾回收
14 retry 重試功能庫
15 datetime 時間處理
16 time 時間模塊
17 sys 操作系統交互
18 random 隨機庫
19 os 操作系統交互
20 logging 日誌庫

使用Selenium時需要注意,一般推薦PhantomJS無頭瀏覽器配合使用,也可以安裝Chrome、FireFox等。

自己實現了一個庫Console_Color,用於控制打印文本的顏色,本來想配合tqdm(進度條庫)一起使用,非常驚豔,可是一想到是自動化的,沒人看...

3.Theory

受到Agile模式(敏捷開發)的影響,列了11個小週期來做Scrum,每個小週期就相當於一個模塊,會根據任務量的大小逐一完成並通過測試,然後實現迭代,完成一次Sprint,而每個模塊都會對外提供實現特殊功能的方法,最後通過調度引擎統一調配和管理。

Id Module Name File Name Describe
1 驗證模塊 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章