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

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

HtmlUnit 開發網絡爬蟲

2019-11-15 00:15:59
字體:
來源:轉載
供稿:網友
HtmlUnit 開發網絡爬蟲

網絡爬蟲第一個要面臨的問題,就是如何抓取網頁,抓取其實很容易,沒你想的那么復雜,一個開源HtmlUnit包,幾行代碼就OK啦!

通常在一個頁面中會包含別的Url,在別的Url當中又會包含更多的Url。如果我們要對與該站點相關的Url全部都抓取過來。就相當于我們要對跟這個站有關的Url進行搜索。

常用的搜索算法有bfs和dfs,考慮到網頁上的Url的重要程度還是以廣度來分布的,所以這里采用bfs來搜索url。

到這里又會產生一些問題:

1,搜索過的url,并不需要重新訪問2,如何拼湊新的url3,不要訪問站外url,處理無法訪問的url等.....

總之我們盡可能的根據實際的情況得到自己想要的url~所以我們盡可能編寫合法的剪枝算法。

下面添上自己胡亂寫的算法的框架,寫的不好哈哈。

import java.io.IOException;import java.net.MalformedURLException;import java.util.HashMap;import java.util.HashSet;import java.util.LinkedList;import java.util.Map;import java.util.Queue;import java.util.Set;import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;import com.gargoylesoftware.htmlunit.WebClient;import com.gargoylesoftware.htmlunit.html.HtmlAnchor;import com.gargoylesoftware.htmlunit.html.HtmlPage;//引用HtmlUnitpublic class MyWalker {    static int num = 0;//暫時用num進行限制        final static WebClient webClient = new WebClient();    static Queue<String> Q = new LinkedList<String>();//存放被抓取的Url    static Set<String> linkUrl = new HashSet<String>();    static Map<String,Boolean> flagMap = new HashMap<String,Boolean>();//標記Url是否訪問過        static{        webClient.getOptions().setCSSEnabled(false);        webClient.getOptions().setJavaScriptEnabled(false);    }        PRivate static String baseUrl = "http://xjasc.gov.cn";        //拼湊出可再次訪問的url, 這里的拼湊是不完整的    private static String createUrl(String current, String u){      return current + "/" + u;    }        //判斷該鏈接是否合法    private static boolean isLegal(String url){        if(num > 100) return false;        return true;    }        //頁面是否壞掉    private static boolean isBadUrl(String url){                return false;    }      private static  void bfs(){        Q.offer(baseUrl);        linkUrl.add(baseUrl);     while(!Q.isEmpty()){            //得到當前的Url            try {                String tmpUrl = Q.poll();                if(flagMap.get(tmpUrl)==null){//該結點沒有訪問過                    flagMap.put(tmpUrl, true);//標記為已經訪問                    HtmlPage page = webClient.getPage(tmpUrl);                    java.util.List<HtmlAnchor> achList=page.getAnchors();                    for(HtmlAnchor ach:achList){                                    String newUrl = createUrl(tmpUrl, ach.getHrefAttribute());                                    if(isLegal(newUrl)){                            System.out.println(newUrl);                            num++;                            linkUrl.add(newUrl);                            Q.offer(newUrl);                        }                                        }                             }                } catch (FailingHttpStatusCodeException e) {                    System.out.println(e.getStatusCode());            } catch (MalformedURLException e) {            } catch (IOException e) {            }                        }            }    public static void main(String[] args) {        bfs();    }    }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南川市| 陕西省| 策勒县| 清原| 平利县| 湖州市| 瑞丽市| 信阳市| 泸西县| 延寿县| 莲花县| 水城县| 宜良县| 鹿邑县| 台中市| 平泉县| 盐池县| 凤山市| 泽库县| 科技| 集贤县| 江北区| 崇义县| 安新县| 丰顺县| 洪雅县| 景洪市| 旬阳县| 和政县| 上思县| 新田县| 饶河县| 巴林右旗| 前郭尔| 汉川市| 溧阳市| 乌苏市| 鄂尔多斯市| 重庆市| 凤山市| 孝昌县|