使用jsoup获取谷歌搜索结果时出现403错误

我正在尝试使用以下代码获取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错误?

您只需将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() 

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

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

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

但这与我认为的谷歌政策有关。

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

替换声明

 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(); 

试试这个:

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

如果userAgent没有工作就像它不适合我。

在某些情况下,您需要设置引荐来源。 它对我的情况有帮助。

完整的来源在这里

  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); }