目錄
4.Environment and Configuration
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 | 構造郵件的(支持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