<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 胖胖泡泡 閱讀(167) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 午夜理伦剧场免费| 亚洲中文精品久久久久久不卡| AV在线播放日韩亚洲欧| 免费va人成视频网站全| 热99re久久免费视精品频软件| 在线观看免费成人| 免费被黄网站在观看| 国内自产拍自a免费毛片| 在线观看成人免费视频| 日韩免费无砖专区2020狼| 国产麻豆剧传媒精品国产免费| 日韩一品在线播放视频一品免费| 国内精品免费视频自在线| 日韩视频免费在线| 免费jjzz在线播放国产| 深夜国产福利99亚洲视频| 亚洲免费无码在线| 亚洲精品中文字幕乱码三区| 久久精品国产亚洲AV麻豆王友容| 亚洲一二成人精品区| 亚洲成a人片在线网站| 国产亚洲中文日本不卡二区| 亚洲人av高清无码| 在线播放国产不卡免费视频| 成人免费乱码大片A毛片| 日本亚洲欧洲免费天堂午夜看片女人员 | 久久亚洲免费视频| 亚洲黄色免费在线观看| 无码日韩精品一区二区免费| 成人永久福利免费观看| 中文字幕亚洲不卡在线亚瑟| 亚洲av激情无码专区在线播放| 亚洲白色白色永久观看| 亚洲国产精品美女久久久久| sss日本免费完整版在线观看| 精品国产污污免费网站| 希望影院高清免费观看视频| 亚洲 另类 无码 在线| 国产精一品亚洲二区在线播放| 亚洲精品**中文毛片| 久久人午夜亚洲精品无码区|