国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

分布式爬蟲的設計與實現

2019-11-06 06:13:22
字體:
來源:轉載
供稿:網友

分布式爬蟲的設計與實現

基本環境linux操作系統、pycharm集成開發環境主要功能設計并實現一種基于“C/S”結構的爬蟲,在并發爬取的情況下實現對大規模網頁的爬取,并提取出網頁的相關信息。關鍵技術python、mongodb、廣度優先與深度控制系統結構這里寫圖片描述實現方案Mongodb數據庫中用于存放url對應的記錄,每條記錄格式為: { “_id”:url, “state”:OUTSTANDING|PROCESSING|COMPLETE “deepth”: }

其中,用url作為id,使得數據庫中的url唯一;state記錄url的訪問狀態——未訪問、正在訪問、訪問過;deepth代表當前url的深度,在廣度優先情況下對深度進行控制。同時,mongodb的雖然不支持事務,但原子操作保證了多線程之間的并發同步。

Client端運行相同的爬蟲程序,從mongodb數據庫隊列中取出url進行爬取頁面;由于數據庫存儲速率的瓶頸,本次選擇將頁面存儲在本地,通過正則表達式提取頁面的url,并將其加入mongodb數據庫隊列。Client端采用“多線程+多進程”的方式,使用線程池和進程池,進程數目等于cpu核心數目,每個進程中線程數目為5。

主要難點?Mongodb數據庫的遠程連接 ?Python訪問HDFS,一直失敗 ?爬取速率不好控制,間隔時間需要手動調試,特別是在多線程+多進程下更難以控制速率有待改進?使用數據庫連接池 ?使用HDFS存儲 ?在hadoop平臺上運行爬蟲程序 ?Mongodb隊列需要進一步優化,如使用索引、數據壓縮存儲、搭建分布式mongodb ?使用布隆過濾器,記錄已經爬取的url相關技術點http狀態響應碼 2XX:成功 3XX:跳轉 4XX:客戶端錯誤 5XX:服務器錯誤

網頁抓取策略

廣度優先:1)重要的網頁離種子站點比較近;2)廣度優先有利于并行爬蟲。 基于隊列實現廣度優先;同時,限制爬取深度。

記錄抓取歷史

用HashSet集合保存:查詢復雜度為O(1);消耗內存較大 Url經md5處理后存入hashset:消耗內存較小 Url存入數據庫:C/數據庫模式下有利于并發操作 布隆過濾器:時間、空間效率高,但只在本地存儲,不適于分布式并發操作

解析網頁

?用正則表達式:時間最快;容錯能力有限 ?用beautifulsoup解析:時間比較慢;容錯能力好 ?用lxml解析器:時間和容錯能力均衡:CSS選擇器、xpath

網站評估

?<網頁根目錄>/robots.txt查看網站限制信息 ?進入sitemap查看網站地圖 ?Site:<網址>查看網站的規模

頁面處理

?提取超鏈接時,注意排除內部錨點,內部錨點以“#數字”開頭 ?用Chrome的Inspector查看網頁元素

項目源代碼

GitHub地址


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐亭县| 炎陵县| 迁安市| 竹溪县| 连山| 霍山县| 宝兴县| 老河口市| 丹阳市| 巴林左旗| 互助| 威远县| 镇康县| 平和县| 博乐市| 乐平市| 新乡县| 阿尔山市| 德庆县| 昂仁县| 高安市| 武宁县| 邻水| 宿迁市| 宿州市| 安义县| 广平县| 五峰| 阿坝县| 鄂托克旗| 韩城市| 涟水县| 宁都县| 蒙自县| 阿克苏市| 丹阳市| 江源县| 宁蒗| 柏乡县| 宁强县| 会昌县|