簡體   English   中英

Jsoup Google搜索結果

[英]Jsoup Google Search Results

我試圖解析谷歌搜索結果的HTML以獲取每個結果的標題。 這是通過android在一個私有嵌套類中完成的,如下所示:

private class WebScraper extends AsyncTask<String, Void, String> {

    public WebScraper() {}

    @Override
    protected String doInBackground(String... urls) {
        Document doc;
        try {
            doc = Jsoup.connect(urls[0]).get();
        } catch (IOException e) {
            System.out.println("Failed to open document");
            return "";
        }
        Elements results = doc.getElementsByClass("rc");
        int count = 0;
        for (Element lmnt : results) {
            System.out.println(count++);
            System.out.println(lmnt.text());
        }
        System.out.println("Count is : " + count);
        String key = "test";
        //noinspection Since15
        SearchActivity.this.songs.put(key, SearchActivity.this.songs.getOrDefault(key, 0) + 1);
        // return requested
        return "";
    }

}

我要解析的示例網址: http//www.google.com/#q = i + might + site: genius.com

由於某種原因,當我運行上面的代碼時,我的計數打印為0,因此沒有元素存儲在結果中。 任何幫助深表感謝! PS文檔肯定已初始化,HTML頁面正確加載

此代碼將在Google中搜索“Apple”之類的字詞,並從結果中獲取所有鏈接並顯示其標題和網址。 它可以在google檢測到並停止給出結果后的一天內搜索最多500個單詞。

    search="Apple"; //your word to be search on google
    String userAgent = "ExampleBot 1.0 (+http://example.com/bot)"; 
    Elements links=null;
    try {
          links = Jsoup.connect(google + 
                  URLEncoder.encode(search,charset)).
                  userAgent(userAgent).get().select(".g>.r>a");
        } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
        } catch (IOException e1) {
       // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    for (Element link : links) {
                String title = link.text();
                String url = link.absUrl("href"); // Google returns URLs in 
    format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
                try {
                    url = URLDecoder.decode(url.substring(url.indexOf('=') + 
    1, url.indexOf('&')), "UTF-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                if (!url.startsWith("http")) {
                    continue; // Ads/news/etc.
                }

                System.out.println("Title: " + title);
                System.out.println("URL: " + url);


    }

如果您查看Google頁面的源代碼,您會注意到它不包含瀏覽器中正常顯示的任何文本數據 - 只有一堆javascript代碼。 這意味着Google會動態輸出所有搜索結果。

Jsoup將獲取該javascript代碼,並且它不會找到任何帶有“rc”類的html代碼,這就是為什么在代碼示例中得到零計數的原因。

請考慮使用Google的公共搜索API,而不是直接解析其html網頁: https//developers.google.com/custom-search/

我完全同意Matvey Sidorenko,但是要使用Google公共搜索API,您需要擁有Google Api密鑰 但問題是谷歌限制每個api密鑰100次搜索 ,超過這個搜索 ,它會停止工作並在24小時內重置。

最近我正在開發一個項目,我們需要為用戶提供的不同查詢獲取谷歌搜索結果鏈接,以便克服這個API限制問題,我制作了自己的API直接在google / ncr搜索並給你結果鏈接。

免費的Google搜索API- http://freegoogleapi.azurewebsites.net/http://google.bittque.com

我使用HTML-UNIT庫來制作這個API。

您可以使用我的API,也可以使用HTML UNIT庫來實現您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM