2013-01-22 67 views
4

我尝试使用下面的代码来获得谷歌的结果得到谷歌的结果:403错误,而使用jsoup

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错误?

+1

这也许是没有'USER_AGENT'头触发403。我认为这是对谷歌的服务条款在任何情况下对warning.then –

+0

oh.thanks的有一种通过自动化获得谷歌结果的方法? – lakshman

+1

我认为他们曾经有一个搜索API,但我不知道状态是什么 –

回答

26

你只需要用户代理属性添加到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() 
+0

谢谢!很棒! – ricardogobbo

2

其实,你可以仅仅通过增加一个用户代理

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

逃避403错误但是,这是对谷歌的政策,我认为。编辑:谷歌捕捉机器人比你想象的更快。但是,您可以将其用作临时解决方案。

1

REPLACE语句

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

with语句

Document doc=Jsoup.connect("http://www.google.com/search?q=lakshman").userAgent("Chrome").get(); 
0

试试这个:

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

以防userAgent无法正常工作就像它不适合我一样。

0

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

完整的源here

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