6

我正在尝试使用以下代码获取 Google 结果:

Document doc = con.connect("http://www.google.com/search?q=lakshman").timeout(5000).get();

但我得到了这个例外:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=403,URL=http://www.google.com/search?q=lakshman

403 错误意味着服务器禁止访问,但我可以在 Web 浏览器中加载此 URL。为什么 Jsoup 会出现 403 错误?

4

6 回答 6

36

您只需将 UserAgent 属性添加到 HTTP 标头,如下所示:

Jsoup.connect(itemUrl)
     .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36")
     .get()
于 2014-03-18T02:44:52.660 回答
6

谷歌不允许机器人,你不能用jsoup连接谷歌。您可以使用Google Web Search API(已弃用),但您每天可以提出的请求数量将受到限制。

于 2013-12-16T22:01:25.250 回答
2

实际上,您可以通过添加用户代理来规避 403 错误

doc = Jsoup.connect(url).timeout(timeout)
                    .userAgent("Mozilla")

但这违反了我认为的谷歌政策。

编辑:谷歌捕捉机器人的速度比你想象的要快。但是,您可以将其用作临时解决方案。

于 2014-02-10T22:10:14.807 回答
1

试试这个:

Document doc =con.connect("http://www.google.com/search?q=lakshman").ignoreHttpErrors(true).timeout(5000).get();

万一 userAgent 不起作用就像它不适合我一样。

于 2016-08-23T23:11:18.407 回答
1

在某些情况下,您需要设置推荐人。它对我的情况有所帮助。

完整的来源在这里

    try{

        String strText = 
                Jsoup
                .connect("http://www.whatismyreferer.com")
                .referrer("http://www.google.com")
                .get()
                .text();

        System.out.println(strText);

    }catch(IOException ioe){
        System.out.println("Exception: " + ioe);
    }
于 2018-01-29T21:13:48.000 回答
0

替换语句

Document doc =con.connect("http://www.google.com/search?q=lakshman").timeout(5000).get();

与声明

Document doc=Jsoup.connect("http://www.google.com/search?q=lakshman").userAgent("Chrome").get();
于 2014-04-29T20:00:33.953 回答