python开发框架 代码生成_500 行 Python 代码构建一个轻量级爬虫框架
轉載:https://www.jqhtml.com/11084.html
既然已經有像 Scrapy 這樣優秀的爬蟲框架,為何還要造輪子呢?嗯,其實最主要的還是想要將學習到 Python 知識綜合起來,提高一下自己。
Features
1.簡單、易用;
2.易于定制的 Spider;
3.多線程實現并發下載。
待改進
1.更多的測試代碼;
2.添加更多的網站爬蟲示例;
3.完善爬蟲調度,支持 Request 優先級調度。
xcrawler 介紹
項目結構
Crawler engine (生產者+消費者模型)
1.引擎啟動時會啟動一個后臺線程池,后臺線程池負責下載由調度器提供給它的所有 URL(Request),并將響應(Response)結果存放到隊列中;
2.引擎的前臺解析線程會不斷消費處理隊列中的響應(Response),并調用相應 Spider 的解析函數處理這些相應;
3.引擎負責處頁面理解析回來的對象,所有的 Request 對象都會被放到隊列中(遞歸抓取時)等待處理,所有的字典對象(item)送給 Spider 的 process_item 方法處理。
配置介紹
配置項目
1.download_delay: 每批次之間的下載延遲(單位為秒),默認為 0;
2.download_timeout:下載等待延遲,默認為 6 秒;
3.retry_on_timeout:即當下載超時后,對應的請求是否應該重試;
4.concurrent_requests:并發下載數;
5.queue_size:請求隊列大小,當隊列已滿時,會阻塞后續的請求。
示例配置:
settings ={
'download_delay': 0,
'download_timeout': 6,
'retry_on_timeout': True,
'concurrent_requests': 32,
'queue_size': 512
}
Spider 基類關鍵方法介紹
1.spider_started:該方法會在引擎啟動時被觸發調用,你可以通過繼承該方法進行一些初始化工作,比如配置 pipeline 輸出文件或者數據庫連接等等;
2.spider_idle:該方法會在引擎處理空閑狀態(即沒有任何 requests 在隊列)時被觸發調用,你可以通過繼承該方法給引擎添加新的請求等(使用 self.crawler.crawl(new_request, spider=self) 即可);
3.spider_stopped:該方法會在引擎關閉時觸發調用,你可以通過繼承該方法并在 Spider 結束工作前做一些清理工作,如關閉文件管道、關閉數據庫連接等;
4.start_requests:該方法會為引擎提該 Spider 的對應種子請求;
5.make_requests_from_url:該方法會為你的 URL 創建一個 Request 對象;
6.parse:該方法為請求的默認解析函數回調,當然你可以可以在創建 Request 時指定其它的回調函數;
7.process_request:每當引擎處理一個 Spider 對應的請求時,該方法會被觸發調用,你可以通過繼承該方法對 request 做些設置,比如更換隨機的 User-Agent,替換 Cookies 或者代理等;當然,你可以將 request 設置為 None 從而忽略該請求;
8.proccess_response:每當引擎處理一個 Spider 對應的響應時,該方法會被觸發調用;
9.process_item:每當引擎處理一個 Spider 對應的 item 時,該方法會被觸發調用,你可以通過繼承該方法將抓取并解析到的 item 存儲到數據庫或者本地文件中。
注意
1.你可以在一個 Crawler 進程中裝入不同的 Spider class,但需要保證不同的 Spider 的名稱也要不同,否則會被引擎拒絕;
2.需要根據情況調整下載延遲和并發數大小;下載延遲盡量不要太大,否則每批請求可能會等待較長時間才會處理完成,從而影響爬蟲性能;
3.Windows 下的測試還沒做,我用的是 Ubuntu,所以如果您有什么問題,歡迎反饋哈!
安裝
1.請移步項目主頁 xcrawler (https://github.com/chrisleegit/xcrawler) 下載源碼;
2.請保證你的安裝環境為 Python 3.4+;
3.請使用 pip3 setup.py install 安裝即可。
示例
總結
以上是生活随笔為你收集整理的python开发框架 代码生成_500 行 Python 代码构建一个轻量级爬虫框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可以在unix_在pytho
- 下一篇: mysql兼容性高吗_MySQL与标准的