Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jsoup谷歌搜索结果_Java_Android_Web Scraping_Jsoup_Google Search - Fatal编程技术网

Java Jsoup谷歌搜索结果

Java Jsoup谷歌搜索结果,java,android,web-scraping,jsoup,google-search,Java,Android,Web Scraping,Jsoup,Google Search,我试图解析谷歌搜索结果的HTML,以获取每个结果的标题。这是通过android在私有嵌套类中完成的,如下所示: private class WebScraper extends AsyncTask<String, Void, String> { public WebScraper() {} @Override protected String doInBackground(String... urls) { Document doc;

我试图解析谷歌搜索结果的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 "";
    }

}
私有类WebScraper扩展异步任务{
公共WebScraper(){}
@凌驾
受保护的字符串doInBackground(字符串…URL){
文件文件;
试一试{
doc=Jsoup.connect(URL[0]).get();
}捕获(IOE异常){
System.out.println(“打开文档失败”);
返回“”;
}
元素结果=doc.getElementsByClass(“rc”);
整数计数=0;
对于(元素lmnt:结果){
System.out.println(count++);
System.out.println(lmnt.text());
}
System.out.println(“计数为:“+Count”);
String key=“测试”;
//从15年起就没有检查过
SearchActivity.this.songs.put(key,SearchActivity.this.songs.getOrDefault(key,0)+1);
//要求退货
返回“”;
}
}
我正在尝试解析的url示例:


出于某种原因,当我运行上述代码时,我的计数被打印为0,因此结果中没有存储任何元素。非常感谢您的帮助!P.S.文档肯定已初始化,HTML页面正在正确加载

如果您检查谷歌页面的源代码,您会注意到它不包含任何通常在浏览器中显示的文本数据-只有一堆javascript代码。这意味着谷歌会动态输出所有搜索结果

Jsoup将获取该javascript代码,并且它不会找到任何包含“rc”类的html代码,这就是为什么代码示例中的计数为零


考虑使用谷歌的公共搜索API,而不是直接解析其html页面:

如果你查看Google页面的源代码,你会注意到它不包含任何通常在浏览器中显示的文本数据——只有一堆javascript代码。这意味着谷歌会动态输出所有搜索结果

Jsoup将获取该javascript代码,并且它不会找到任何包含“rc”类的html代码,这就是为什么代码示例中的计数为零


考虑使用谷歌的公共搜索API,而不是直接解析其html页面:

我完全同意Matvey Sidorenko,但要使用google公共搜索API,您需要使用google API密钥。但问题是谷歌限制了每个api键100次搜索,超过这个限制,它将停止工作,并在24小时内重置

最近我在做一个项目,我们需要获得用户提供的不同查询的谷歌搜索结果链接,为了克服API限制的问题,我制作了自己的API,直接在谷歌/ncr上搜索,并提供结果链接

免费谷歌搜索API-

我使用了HTML-UNIT库来制作这个API


您可以使用我的API或HTML单元库来实现所需功能。

我完全同意Matvey Sidorenko但要使用google公共搜索API,您需要使用google API密钥。但问题是谷歌限制了每个api键100次搜索,超过这个限制,它将停止工作,并在24小时内重置

最近我在做一个项目,我们需要获得用户提供的不同查询的谷歌搜索结果链接,为了克服API限制的问题,我制作了自己的API,直接在谷歌/ncr上搜索,并提供结果链接

免费谷歌搜索API-

我使用了HTML-UNIT库来制作这个API


您可以使用my API或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);


    }
search=“苹果”//在谷歌上搜索你的单词
String userAgent=“ExampleBot 1.0(+http://example.com/bot)"; 
元素链接=空;
试一试{
links=Jsoup.connect(谷歌+
encode(搜索,字符集))。
userAgent(userAgent).get().select(“.g>.r>a”);
}捕获(不支持DencodingException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
用于(元素链接:链接){
字符串标题=link.text();
String url=link.absUrl(“href”);//谷歌以
格式“http://www.google.com/url?q=&sa=U&ei=".
试一试{
url=URLDecoder.decode(url.substring(url.indexOf('='))+
1,url.indexOf('&'),“UTF-8”);
}捕获(不支持的编码异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
如果(!url.startsWith(“http”)){
继续;//广告/新闻/等。
}
System.out.println(“标题:”+标题);
System.out.println(“URL:+URL”);
}

此代码将在谷歌中搜索像“苹果”这样的单词,从搜索结果中获取所有链接,并显示其标题和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);


    }
search=“苹果”//在谷歌上搜索你的单词
String userAgent=“ExampleBot 1.0(+http://example.com/bot)"; 
元素链接=空;
试一试{
links=Jsoup.connect(谷歌+
encode(搜索,字符集))。
userAgent(userAgent).get