使用jsoup获取谷歌结果时出现403错误[重复]
Posted
技术标签:
【中文标题】使用jsoup获取谷歌结果时出现403错误[重复]【英文标题】:403 error while getting the google result using jsoup [duplicate] 【发布时间】:2013-01-06 05:00:49 【问题描述】:我正在尝试使用以下代码获取 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错误?
【问题讨论】:
可能是缺少USER_AGENT
标头会触发 403。我认为无论如何这都违反了 Google 的 TOS
oh.thanks for the warning.then 有没有办法通过自动化获得谷歌结果?
我认为他们曾经有一个搜索 API,但我不确定状态是什么
可以使用jsoup设置用户代理:***.com/questions/6581655/…
***.com/questions/10120849/…
【参考方案1】:
您只需将 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()
【讨论】:
谢谢!效果很好!【参考方案2】:Google 不允许使用机器人,您不能使用 jsoup 连接 google。 您可以使用Google Web Search API (Deprecated),但您每天可以提出的请求数量将受到限制。
【讨论】:
【参考方案3】:其实你可以通过添加一个用户代理来规避 403 错误
doc = Jsoup.connect(url).timeout(timeout)
.userAgent("Mozilla")
但这违反了我认为的谷歌政策。
编辑:Google 捕获机器人的速度比您想象的要快。但是,您可以将其用作临时解决方案。
【讨论】:
【参考方案4】:试试这个:
Document doc =con.connect("http://www.google.com/search?q=lakshman").ignoreHttpErrors(true).timeout(5000).get();
万一 userAgent 不起作用就像它不适合我一样。
【讨论】:
【参考方案5】:在某些情况下,您需要设置推荐人。这对我有帮助。
完整源码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);
【讨论】:
【参考方案6】:替换语句
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();
【讨论】:
以上是关于使用jsoup获取谷歌结果时出现403错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Gmail api 时尝试获取电子邮件列表时出现错误 [403]