<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一路拾遺
    Collect By Finding All The Way ......
    posts - 81,comments - 41,trackbacks - 0

    手上的項目需要到網絡上去爬取wsdl文件,來充實服務網絡。一開始的想法是自己采用網絡爬蟲的想法,可以自己編寫一個只針對網頁上的超鏈接進行遍歷的爬蟲;或者可以對現有的爬蟲器進行改進,使其只關注網頁的鏈接部分,至于網頁的內容不去理會,這樣可以避免爬蟲的效率和數據流量過大的問題。后來發現Goolge的高級搜索可以對文件的類型進行約束,所以決定利用Google的搜索引擎來實現該目標。利用Google搜索引擎進行檢索,能夠有很高的查詢效率和很高的查全率與查準率,同時還可以通過關鍵字進行限制查詢。

    利用Google進行檢索主要可以通過以下兩種方法實現:

    1.使用Google API,可以直接設定查詢的條件,并且得到結構簡單的查詢結果。但是Google API目前好像已經停止使用了,非常遺憾。

    2.通過像Google發送頁面請求消息來實現查詢。這就需要設計到兩個問題:首先要對Google的查詢請求的格式有一定了解,如何把查詢的約束條件信息包含在請求消息中;其次,通過頁面請求查詢,得到的是html頁面代碼,所以要對頁面中的內容進行解析、提取,過濾出有用的超鏈接結果。
    這里主要介紹一下后一種方法,但從理論上講前一共方法可加科學和簡便。

    一、Google的查詢頁面請求消息格式

    http://www.google.com/search?num=50&hl=en&lr=&newwindow=1&as_qdr=all&q=a++filetype:wsdl&start=50&sa=N
    其中 num為每頁的結果個數;hl表示語言;q=后面為關鍵字;filetype為文件格式;start為開始的結果標號。

    二、發送頁面請求

        private String searchPage(String keyString, String filetype, int start) throws IOException
        
    {
            URL url 
    = buildurl(keyString, filetype, start);
            
            String htmlString 
    = new String();
            HttpURLConnection http 
    = (HttpURLConnection) url.openConnection();
            http.setRequestProperty(
    "User-Agent""Mozilla/5.0");
            http.connect();
            InputStream    urlstream 
    = http.getInputStream();
            InputStreamReader inputStreamReader 
    = new InputStreamReader(urlstream);
            BufferedReader bufReader 
    = new BufferedReader(inputStreamReader);
            String currentLine 
    = null;
            
    while ((currentLine = bufReader.readLine()) != null
                htmlString 
    += currentLine;
            
    return htmlString;
        }

        

    三、對返回頁面內容進行解析

    這里使用了HTML Parser進行解析,代碼如下:
        private List<String> listURL(String html, String filetype)
        
    {
            List
    <String> urlList = new ArrayList<String>();
            Parser parser 
    = Parser.createParser(html, "UTF-8");
            
            NodeList nodeList 
    = null;
            
    try {
                nodeList 
    = parser.extractAllNodesThatMatch(
                        
    new NodeFilter() {

                            
    private static final long serialVersionUID = 0L;

                            
    public boolean accept(Node node) {
                                
    if (node instanceof LinkTag)
                                    
    return true;
                                
    else
                                    
    return false;
                            }

                        }
    );
            }
     catch (ParserException e) {
                e.printStackTrace();
            }
            
            
            
    for (int i=0; i<nodeList.size(); i++{
                LinkTag node 
    = (LinkTag) nodeList.elementAt(i);
                
    if(node.extractLink().endsWith("." + filetype) && !node.getStringText().equalsIgnoreCase("Similar pages"))
                    urlList.add(node.extractLink());
            }

            
    return urlList;
        }


    四、附完整程序代碼

    package cn.edu.tju.cs.ikse.sn.spider;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;

    import org.htmlparser.Node;
    import org.htmlparser.NodeFilter;
    import org.htmlparser.Parser;
    import org.htmlparser.tags.LinkTag;
    import org.htmlparser.util.NodeList;
    import org.htmlparser.util.ParserException;

    public class GoogleSearch {
        
        
    private final int intmax = (int) (Math.pow(231- 1);
        
        
    private List<String> splitString(String keyString)
        
    {
            
    if(keyString == null)
                
    return null;
            String[] keyWords 
    = keyString.split(" ");
            List
    <String> keyList = new ArrayList<String>();
            
    for(int i=0; i<keyWords.length; i++)
                
    if(keyWords[i].length() != 0)
                    keyList.add(keyWords[i]);
            
    return keyList;
        }

        
        
    private URL buildurl(String keyString, String filetype, int start)
        
    {
            String urlString 
    = "http://www.google.com/search?num=100&hl=en&lr=&newwindow=1&as_qdr=all&q=";
            
    if(splitString(keyString) != null)
            
    {
                Iterator
    <String> keyIt = splitString(keyString).iterator();
                
    while(keyIt.hasNext())
                    urlString 
    += keyIt.next() + "+";
            }

                urlString 
    += "filetype:" + filetype + "&start=" + start + "&sa=N";
            URL url 
    = null;
            
    try {
                url 
    = new URL(urlString);
            }
     catch (MalformedURLException e) {
                System.out.println(
    "String to URL Errors!");
                e.printStackTrace();
            }

            
    return url;
        }

        
        
    private String searchPage(String keyString, String filetype, int start) throws IOException
        
    {
            URL url 
    = buildurl(keyString, filetype, start);
            
            String htmlString 
    = new String();
            HttpURLConnection http 
    = (HttpURLConnection) url.openConnection();
            http.setRequestProperty(
    "User-Agent""Mozilla/5.0");
            http.connect();
            InputStream    urlstream 
    = http.getInputStream();
            InputStreamReader inputStreamReader 
    = new InputStreamReader(urlstream);
            BufferedReader bufReader 
    = new BufferedReader(inputStreamReader);
            String currentLine 
    = null;
            
    while ((currentLine = bufReader.readLine()) != null
                htmlString 
    += currentLine;
            
    return htmlString;
        }

        
        
    private List<String> listURL(String html, String filetype)
        
    {
            List
    <String> urlList = new ArrayList<String>();
            Parser parser 
    = Parser.createParser(html, "UTF-8");
            
            NodeList nodeList 
    = null;
            
    try {
                nodeList 
    = parser.extractAllNodesThatMatch(
                        
    new NodeFilter() {

                            
    private static final long serialVersionUID = 0L;

                            
    public boolean accept(Node node) {
                                
    if (node instanceof LinkTag)
                                    
    return true;
                                
    else
                                    
    return false;
                            }

                        }
    );
            }
     catch (ParserException e) {
                e.printStackTrace();
            }
            
            
            
    for (int i=0; i<nodeList.size(); i++{
                LinkTag node 
    = (LinkTag) nodeList.elementAt(i);
                
    if(node.extractLink().endsWith("." + filetype) && !node.getStringText().equalsIgnoreCase("Similar pages"))
                    urlList.add(node.extractLink());
            }

            
    return urlList;
        }

        
        
    public List<String> search(String keyString, String filetype, int num)
        
    {
            List
    <String> urlList = new ArrayList<String>();
            
    int start = 0;
            
    while(urlList.size() < num)
            
    {
                String html 
    = null;
                
    try {
                    html 
    = searchPage(keyString, filetype, start);
                    start 
    += 100;
                }
     catch (IOException e) {
                    e.printStackTrace();
                }

                List
    <String> urlListOfPage = listURL(html, filetype);
                
    if(urlListOfPage.size() == 0)
                
    {
                    System.out.println(
    "The maximum number of the results is " + urlList.size());
                    
    return urlList;
                }

                urlList.addAll(urlListOfPage);
            }

            
    while(urlList.size() > num)
                urlList.remove(urlList.size()
    -1);
            
    return urlList;
        }
     
        
        
    public List<String> search(String keyString, String filetype)
        
    {
            
    return search(keyString, filetype, intmax);
        }

        
        
    public static void main(String[] args) {
            GoogleSearch googleSearch 
    = new GoogleSearch();
            List
    <String> re = googleSearch.search("book""owl"1000);
            System.out.println(re.size());
            
    for(int i=0;i<re.size();i++)
                System.out.println(re.get(i));
        }

    }
     


    posted on 2008-08-01 20:37 胖胖泡泡 閱讀(172) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 99在线精品视频观看免费| 亚洲成av人无码亚洲成av人| 国产成人无码精品久久久久免费 | 国产精品无码亚洲精品2021| 曰批全过程免费视频在线观看| 亚洲精品韩国美女在线| 69视频在线是免费观看| 亚洲综合久久久久久中文字幕| 无码精品A∨在线观看免费| 亚洲日韩乱码中文无码蜜桃| 免费可以看黄的视频s色| 亚洲欧美国产日韩av野草社区| 免费毛片在线播放| 偷自拍亚洲视频在线观看99| 亚洲精品国产精品国自产观看| 成人一区二区免费视频| 国产av无码专区亚洲av桃花庵| 亚洲视频在线观看免费| 亚洲免费观看网站| 国产美女被遭强高潮免费网站| 污网站免费在线观看| 亚洲国产精品无码中文字| 日本视频一区在线观看免费| 污视频网站免费在线观看| 中文字幕亚洲一区二区三区| 久久大香香蕉国产免费网站| 亚洲情A成黄在线观看动漫软件| 日韩中文字幕免费| 成人片黄网站色大片免费观看cn| 久久久久亚洲av无码专区导航 | 日产乱码一卡二卡三免费| a级毛片免费网站| 亚洲日韩乱码久久久久久| 国产在线19禁免费观看| 两个人看的www免费视频中文| 亚洲日韩中文字幕天堂不卡| 国产女高清在线看免费观看| 成人无码WWW免费视频| 亚洲欧美日韩中文无线码| 亚洲无线码一区二区三区| 欧美日韩国产免费一区二区三区|