2

我正在使用此代码使用 google 对单词列表进行查询,并从 google 中提取搜索结果的数量。它工作正常,但从昨晚开始,它在执行 200 次查询后一直给我这个错误(我猜是谷歌标记了我!):线程“main”java.io.IOException 中的异常:服务器返回 HTTP 响应代码:503 用于 URL:http ://www.google.com/sorry/?continue=http://www.google.com/ ...

“红色”只是一个例子。

public class Google {
public static void main(String[] args) throws IOException {
        String query = "red";
        String urlName = "http://www.google.com/search?q=\""+query+"\"";
        URL url = new URL(urlName);
        URLConnection conn = url.openConnection();
        conn.setRequestProperty("User-Agent",
                "Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.8.1.6) Gecko/20070723 Iceweasel/2.0.0.6 (Debian-2.0.0.6-0etch1)");
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        Pattern pattern = Pattern.compile("<div>About (.*?) results</div>"); //<div>About 1,620,000 results</div>
        String line;
        while ((line = in.readLine()) != null) {
            Matcher m = pattern.matcher(line);
            if (m.find()) {
                System.out.println(m.group(1)); // m.group(1) coresponds to results number: i.e.: 1,620,000
            }
        }
        in.close();
    }

}

任何解决方案,建议?

4

2 回答 2

5

您被标记为机器人,可能是由于您的查询频率。尝试从不同的 IP 运行它(在该 IP 被标记为机器人之前)。

无论如何,您可能应该使用 Google 搜索 API。从网站 https://developers.google.com/custom-search/v1/overview

价钱

免费配额

所有用户均可免费使用,每天最多 100 个查询。

付费使用

如果您未注册计费,超出免费使用配额的任何使用都将失败。启用计费后,您将继续每天收到 100 次免费查询。但是,对于所有额外的请求,您将按每 1000 次查询 5 美元的费率付费,每天最多 10,000 次查询。如果您需要额外配额,请从控制台申请额外配额。

于 2012-04-04T21:03:59.393 回答
0

具体从错误页面:

“我们的系统检测到来自您的计算机网络的异常流量。此页面检查是否真的是您发送请求,而不是机器人。”

由于您显然一个访问他们页面的机器人,他们已经采取了某些措施来规避您花费他们的流量,并且不希望您继续这种做法。

话虽如此,您有时需要向 Google 验证您的身份。此页面推荐的方式是向作者(您自己)展示图像,手动绕过验证码,然后保存 cookie以供您的程序使用。

于 2012-04-04T21:02:18.617 回答