我正在使用JSOUB来抓取所有网页,如下所示:
public static final String GOOGLE_SEARCH_URL = "https://www.google.com/search";
String searchURL = GOOGLE_SEARCH_URL + "?q="+searchTerm+"&num="+num +
"&start=" + start;
Document doc = Jsoup.connect(searchURL)
.userAgent("Mozilla/5.0 Chrome/26.0.1410.64 Safari/537.31")
// .ignoreHttpErrors(true)
.maxBodySize(1024*1024*3)
.followRedirects(true)
.timeout(100000)
.ignoreContentType(true)
.get();
Elements results = doc.select("h3.r > a");
for (Element result : results) {
String linkHref = result.attr("href");
}
但我的问题是,在代码开始时工作正常。
过了一会儿,它会停止并且总是给我“HTTP错误提取URL。状态= 503错误”。
当我添加.ignoreHttpErrors(true)时,它将无任何错误地工作,但它不会刮掉网页。
*搜索词是我想搜索的任何关键词,num是我需要检索的页数。
有人可以帮忙吗?这是否意味着谷歌阻止了我的IP欺诈?如果有,是否有任何解决方案或我如何scape谷歌搜索结果,拜托?
我需要帮助。谢谢,
503错误通常意味着您尝试废弃的网站阻止了您,因为他们不希望非人类用户导航他们的网站。特别是谷歌。
但是你可以做些什么。如
基本上你需要尽可能的人,以防止网站阻止你。
编辑:
我需要警告你,刮取Google搜索结果是违反他们的ToS而且可能是非法的取决于你的位置。
你可以做什么
您可以使用代理轮播服务来屏蔽您的请求,以便Google将其视为来自多个区域的请求。谷歌proxy rotator service
如果你感兴趣。它可能很昂贵取决于您对数据的处理方式。
然后编写一些模块,在每个请求中更改User-Agent
,以使Google不再对您的请求产生怀疑。
在抓取每页后添加随机延迟。我建议大约1-5秒。随机延迟使您的请求对Google更具人性化
最后,如果一切都失败了,您可能需要查看Google搜索API并使用他们的API而不是抓取他们的网站。