亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

構建網絡爬蟲細化分析

發布時間:2020-05-11 11:58:54 來源:億速云 閱讀:248 作者:Leah 欄目:移動開發

今天小編就為大家帶來一篇構建網絡爬蟲細化分析的文章。小編覺得挺不錯的,為此分享給大家做個參考。一起跟隨小編過來看看吧。


 框架特性  

  • 強大的節點過濾能力
  • 支持post與get兩種數據提交方式
  • 避免網頁重復處理功能
  • 支持多站點內容抓取功能
  • 較強的Html容錯處理
     

框架設計   網絡爬蟲
 

1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
public interface Spinder {
 /**
 * 添加站點訪問器
 *
 * @param siteVisitor
 */
 void addSiteVisitor(SiteVisitor siteVisitor);
 
 
 /**
 * 添加監視器
 *
 * @param watcher
 */
 void addWatcher(Watcher watcher);
 
 
 /**
 * 處理url
 *
 * @param url
 */
 void processUrl(String url);
 
 
 /**
 * 處理url
 * @param url
 * @param parameter
 */
 void processUrl(String url, Map<String, Object> parameter);
 
 
 /**
 * 設置URL倉庫
 *
 * @param urlRepository
 */
 void setUrlRepository(UrlRepository urlRepository);
 }
 


 
 一個爬蟲,至少需要包含一個站點訪問器,站點訪問器用于對URL進行訪問。如果沒有匹配的站點訪問器,URL將被忽略,不做繼續處理。
 一個爬蟲至少需要包含一個監視器,監視器用于對URL中的內容進行過濾,并對命中的節點進行處理。如果沒有監視器,爬蟲爬回的內容就沒有任何價&#20540;。
 一個爬蟲至少需要一個Url倉庫,Url倉庫用于對ur進行判斷,是否已經抓取并處理過。如果沒有url倉庫,將無法判斷url是否處理過,在非常多的時候,會造成死循環,無法退出。  
 當然,一個爬蟲,也必須能夠對url進行處理。
 網站訪問者
 由于一個爬蟲可以有多個站點訪問器,因此,需要有isMatch方法告訴爬蟲是否應該由自己進行處理。
 訪問方式,可以設置是通過get還是post方式獲取數據。
 URL倉庫
 

1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
public interface UrlRepository {
 /**
 * 返回url是否已經在倉庫中存在
 *
 * @param url
 * @return
 */
 boolean isExist(String url);
 
 
 /**
 * 返回url是否已經在倉庫中存在,帶有參數
 *
 * @param url
 * @param parameter
 * @return
 */
 boolean isExist(String url, Map<String, Object> parameter);
 
 
 /**
 * 如果不存在,則放放,如果已經存在,則替換
 *
 * @param url
 * @param content
 */
 void putUrlWithContent(String url, String content);
 
 
 /**
 * 如果不存在,則放放,如果已經存在,則替換
 *
 * @param url
 * @param parameter
 * @param content
 */
 void putUrlWithContent(String url, Map<String, Object> parameter,
 String content);
 
 
 /**
 * 如果存在,則返回內容;如果不存在,則拋出運行時異常
 *
 * @param url
 * @return
 */
 String getContent(String url);
 
 
 /**
 * 如果存在,則返回內容;如果不存在,則拋出運行時異常
 *
 * @param url
 * @param parameter
 * @return
 */
 String getContent(String url, Map<String, Object> parameter);
 }
 


 
 url倉庫用于對url及其內容進行管理。由于方法都簡單明了,因此不做更多介紹。
 監視器
 

1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
public interface Watcher {
 /**
 * 設置節點過濾器
 *
 * @param filter
 */
 void setNodeFilter(NodeFilter<HtmlNode> filter);
 
 
 /**
 * 獲取節點過濾器
 *
 * @return
 */
 NodeFilter<HtmlNode> getNodeFilter();
 
 
 /**
 * 添加處理器
 *
 * @param processor
 */
 void addProcessor(Processor processor);
 
 
 /**
 * 獲取處理器列表
 *
 * @return
 */
 List<Processor> getProcessorList();
 }
 


 
 一個監視器,必須一個節點過濾器,但是可以有多個處理器。
 處理器
 

1
 2
 3
 4
 5
 6
 7
 8
public interface Processor {
 /**
 * 處理節點
 *
 * @param node
 */
 void process(HtmlNode node);
 }
 


 
 處理器非常簡單, 就是對命中的節點進行處理即可。
 示例 通過訪問[http://www.oschina.net/question?catalog=1]可以看到,里面有許多技術問答的問題。
 下面我們就來編寫一段程序來把這些標題打出來:
 編寫爬蟲
 

1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
public static void main(String[] args) {
 Spinder spinder = new SpinderImpl();
 Watcher watcher = new WatcherImpl();
 watcher.addProcessor(new PrintOsChinaProcessor());
 QuickNameFilter<HtmlNode> nodeFilter = new QuickNameFilter<HtmlNode>();
 nodeFilter.setNodeName("div");
 nodeFilter.setIncludeAttribute("class", "qbody");
 watcher.setNodeFilter(nodeFilter);
 spinder.addWatcher(watcher);
 spinder.processUrl("http://www.oschina.net/question?catalog=1");
 }
 


 
 編寫處理器
 

1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
public class PrintOsChinaProcessor implements Processor {
   public void process(HtmlNode node) {
 FastNameFilter<HtmlNode> filter = new FastNameFilter<HtmlNode>(node);
 filter.setNodeName("h3");
 filter.setIncludeNode("a");
 HtmlNode h4 = filter.findNode();
 if (h4 != null) {
 System.out.println(h4.getSubNode("a").getContent());
 }
 }
 }
 


 
 運行結果 輸出結果可能與結果不相同,因為數據是一直在變化的。
 ?
 

1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
約瑟夫環問題,一段代碼求講解
 求推薦一款分享,回復的前端開源js
 MySQL什么情況使用MyISAM,什么時候使用InnoDB?
 phpstorm中使用搜狗輸入中文出現亂行問題怎樣解決?
 Android中如何實現快播中娛樂風向標的效果
 使用java做手機后臺開發!
 Chrome 29的alert對話框好漂亮,有木有啊有木有
 Eclipse&#43;ADT&#43;Android環境配置問題
 關于android holderview的疑惑
 蛋疼  從一個公司到另外一個公司都是一個人開發   有木有
 wsunit 官方訪問不了
 android求大神給我看看什么問題
 關于Hibernate search 查詢結果與數據庫不相符的問題
 求推薦Oracle好的書籍或PDF
 關于"記事本"的 "自動換行" 的實現
 swing在線html文本編輯器
 android下網絡阻塞問題
 文件上線系統該如何做(代碼上線)
 ztree節點設置成check多選框的時候如何只獲取葉節點,不要其他節點
 怎么設置上傳的圖片不自動壓縮
 js 正則表達式問題
 eclipse 經常loading descriptor for XXX ,然后卡死
 關于android開發xml顯示問題
 RMI遠程對象是共享的吧?
 參與開源項目如何進行文檔編寫
 php如何以文件圖標的形式列出服務器上的所有文件?
 php中一個簡單的問題?請幫助解決一下,菜鳥
 請教 solr query分詞查詢,結果為空的問題
 這段代碼有問題嗎,怎么我運行報錯?
 jquery mobile 頁面中切換閃屏問題
 你幫我改好,我給你講個笑話可好TUT
 asp.net問題:Js如何獲取cookie中的&#20540;?
 android  電話攔截并處理
 iis7 下 php 如何顯示報錯?
 安裝virtualbox的時候提示要安裝通用串行總線控制器,這個要安裝嗎?
 API獲取新浪微博消息
 工廠該不該有默認行為
 如何處理開發過程中遺留無用的代碼
 ireport 設計時報表模板時,無法使用sybase驅動com.sybase.jdbc3.jdbc.SybDriver?
 關于 使用druid后的一些問題.
 

以上就是構建網絡爬蟲的方法介紹,詳細使用情況還得要大家自己使用過才能知道具體要領。如果想了解更多相關內容,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广南县| 内乡县| 宁武县| 视频| 长白| 琼海市| 中方县| 岳西县| 青冈县| 舟曲县| 孟州市| 竹北市| 鄄城县| 永德县| 香河县| 什邡市| 陵水| 凤阳县| 福泉市| 扶沟县| 阿坝| 靖州| 岳普湖县| 嘉兴市| 来安县| 竹溪县| 双鸭山市| 扶余县| 镇平县| 东安县| 新余市| 高密市| 瑞安市| 阿克陶县| 临沧市| 西林县| 永丰县| 桃园市| 衡东县| 山东| 资兴市|