【发布时间】:2015-07-28 16:27:03
【问题描述】:
我正在研究爬虫,我必须从 Google Scholar 上的 200-300 个链接中提取数据。我有正在从页面获取数据的工作解析器(每个页面上都有 1-10 个人资料作为我的查询的结果。我正在提取正确的链接,转到另一个页面并再做一次)。在我的程序运行期间,我发现了上述错误:
org.jsoup.HttpStatusException: HTTP error fetching URL. Status=503, URL=https://ipv4.google.com/sorry/IndexRedirect?continue=https://scholar.google.pl/citations%3Fmauthors%3DAGH%2BUniversity%2Bof%2BScience%2Band%2BTechnology%26hl%3Dpl%26view_op%3Dsearch_authors&q=CGMSBFMKrI0YiJHfqgUiGQDxp4NLfGBv6zgPSjfyQ9LBi5F-K1EbGwQ
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:537)
我知道它与针对机器人的简单谷歌保护有关。如何改善我的连接
Connection connection =
Jsoup.connect(url)
.userAgent("Mozilla/5.0")
.timeout(10000)
.followRedirects(true);
没有临时禁令?我知道有一种方法可以检查响应,如下所示:
Connection.Response response =
Jsoup.connect(url)
.userAgent("Mozilla/5.0")
.timeout(10000)
.execute();
int statusCode = response.statusCode();
if (statusCode == 200) { ... }
else if (statusCode == 503) { do recconect magic}
但是当我收到 503 错误时该怎么办?我必须使用代理吗?连接之间的随机等待时间?我希望有比将结果保存在文件中更好的主意,手动硬重启路由器并尝试使用新 IP:P
【问题讨论】:
-
很清楚:Google 不希望您从他们的网站上抓取数据。唯一的解决方法是使用代理,但这不会长期有效。有非官方的 api,例如 this pyton one,但你不会有更好的结果。检查this,因为 Google 不希望您抓取数据,[续..]
-
并检查 this 以获取 Microsoft Academic Search Api,它可能会提供您想要的东西。 (向下滚动)。
-
你在每次抓取之间放置了什么样的延迟?如果答案是“根本没有”,那么你应该被禁止 - 一个良好的服务器/连接可能会因拒绝服务而使目标超载(实际上它不会与谷歌一起,但那会错过重点) .你能在每个 HTTP 操作之间设置几秒钟的延迟吗?这可能会有所帮助 - 我用了五秒钟。
-
@Izzy 嗨兄弟,你介意分享代码以解决谷歌的软禁令。因为我正在做类似的事情来从谷歌新闻中提取数据
标签: connection web-crawler jsoup http-status-code-503 google-crawlers