如何使用 JSOUP java 获取谷歌搜索的第一个标题和网址?

And*_*eas 5 java jsoup

你好,我第一次使用 jsoup 并试图获取我的搜索查询的第一个 url 和标题。代码运行时没有任何错误,但由于某种原因没有显示任何内容。就像我出于某种原因在控制台中没有得到任何结果一样。有人可以解释发生了什么吗?谢谢 !

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;



public class autoClickapp
{



public static void main (String args[]) throws IOException
{  String query = "Milky Way";

        String url = "https://www.google.com/search?q=" + query + "&num=10";

        Document doc = Jsoup
                .connect(url)
                .userAgent("Jsoup client")
                .get();

Elements hTags = doc.select("h1, h2, h3, h4, h5, h6");
        Elements links = doc.select("a[href]");

Elements h2Tags = hTags.select("h3");

            for (int i=0; i <  links.size(); i++) {

                            for (int j=0; j <  h2Tags.size(); j++) {

                               System.out.println(links.get(0).text() + "   " + h2Tags.get(0).text());
                            }
                        }
    }

public static void print(String string) {
        System.out.println(string);
    }


}
Run Code Online (Sandbox Code Playgroud)

The*_*dak 0

我认为这是因为定义卡,它显示在任何常见搜索词的顶部。

所以我在浏览器中使用你的 useragent ( Jsoup client) 尝试了一些 CSS 选择器,并找到并减少了一个选择器:

#main > div > div > div > a
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试此选择器(适用于桌面用户代理):

#search > div div.g a:not([class]):not([ping])
Run Code Online (Sandbox Code Playgroud)

希望其中一个选择器能够工作

public static final String SELECTOR_1 = "#main > div > div > div > a";
public static final String SELECTOR_2 = "#search > div div.g a:not([class]):not([ping])";


Elements links = doc.select(SELECTOR_1);
for (int i=0; i < links.size(); i++) {
    System.out.println(links.get(i).text())
}
Run Code Online (Sandbox Code Playgroud)