java - (Java)获取google的前n个结果作为链接

标签 java api google-search

首先,我查找了类似的问题,但没有找到我需要的答案。所以,如果这个问题不是独特的和新的,请原谅我。

我想获取 google 的前 N ​​个(可能是 5 或 10 个)结果作为链接。 目前我有这样的事情:

String url="http://www.google.com/search?q=";
String charset="UTF-8";
String key="java";
String query = String.format("%s",URLEncoder.encode(key, charset));
URLConnection con = new URL(url+ query).openConnection();
//next line is to trick Google who is blocking the default UserAgent
con.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
    System.out.println(inputLine);
in.close();

这给了我这个搜索的完整 google html 代码,但我只想获得前 n 个结果的原始链接。我该如何管理?

提前致谢。

最佳答案

我已经做了一些 html 调查,你必须在字符串中搜索:

<h3 class="r"><a href="/url?q=

之后是一个链接,该链接继续到双引号。我会尽快制作一个脚本。
编辑
在 google 中搜索字符串键时,这应该获得前 n 个链接:

public static String[] getLinks(String key, int n) throws MalformedURLException, IOException {
    String url = "http://www.google.com/search?q=";
    String charset = "UTF-8";
    String query = String.format("%s", URLEncoder.encode(key, charset));
    URLConnection con = new URL(url + query).openConnection();
    con.setRequestProperty("User-Agent",
            "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    String wholeThing = "";
    while ((inputLine = in.readLine()) != null) wholeThing += inputLine;
    in.close();

    List<String> strings = new ArrayList<String>();
    String search = "<h3 class=\"r\"><a href=\"/url?q=";
    int stringsFound = 0;
    int searchChar = search.length();
    while(stringsFound < n && searchChar <= wholeThing.length()) {
        if(wholeThing.substring(searchChar - search.length(), searchChar).equals(search)) {
            int endSearch = 0;
            while(!wholeThing.substring(searchChar + endSearch, searchChar + endSearch + 4).equals("&amp")) {
                endSearch++;
            }
            strings.add(wholeThing.substring(searchChar, searchChar + endSearch));
            stringsFound++;
        }
        searchChar++;
    }
    String[] out = new String[strings.size()];
    for(int i = 0; i < strings.size(); i++) {
        out[i] = strings.get(i);
    }
    return out;
}

确保导入 java.util.list,而不是 java.awt.list!

关于java - (Java)获取google的前n个结果作为链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51253548/

相关文章:

java - 为我自己的服务器使用谷歌的 Android 授权

java - 在 Spring 中使用 ResponseBody 注释返回一个不工作的 Json

r - 使用 API 下载数据时出现 "You must provide a hash."错误(在 R 中)

Azure DevOps SendMail Rest API 返回 204 但不发送电子邮件

java - 混合语言源目录布局

java - 自定义 log4j 日志管理器以在所有日志中包含前缀

javascript - 我是否需要为每个用户创建 client_id 和 client_secret 以实现 oauth?

search - 向 AWS S3 存储桶添加适当的权限以允许 SEO

jquery - 谷歌自定义搜索干扰下面的链接

search-engine - 没有配额的 JSON 搜索引擎 API 列表,例如 Bing?