java - Jsoup 谷歌搜索结果

标签 java android web-scraping jsoup google-search

我正在尝试解析谷歌搜索结果的 HTML 以获取每个结果的标题。这是通过 android 在如下所示的私有(private)嵌套类中完成的:

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,因此结果中没有存储任何元素。任何帮助深表感谢!附言文档肯定已初始化并且 HTML 页面正在正确加载

最佳答案

此代码将在 google 中搜索“Apple”之类的词,并从结果中获取所有链接并显示它们的标题和 url。在谷歌检测到它并停止提供结果后,它可以在一天内搜索多达 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);


    }

关于java - Jsoup 谷歌搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44121587/

相关文章:

java - 为什么我的 showMessageDialog 显示两次?

android - 贴在墙上 - 图片尺寸有限制吗?

r - 如何在没有按钮参数的 Rvest 包中提交登录表单

python - 如何在selenium python中的jquery日期时间选择器中选择日期

java - 打包 Servlet(编译时出现符号错误)

java - Spring boot 能够接受 Enum 作为请求参数

java - 如何在 Android 中由 ScheduledExecutorService 生成的两个线程之间传递数据?

java - 在我的应用程序中,每当网络服务器中的数据库更新时,都会尝试获取通知。如何实现这一目标?

android - 在android中实现聊天功能

python - 在 Selenium Python 中获取 URL