我正在使用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。Status = 503错误”。
当我添加.ignoreHttpErrors(true)时,它将正常工作而不会出现任何错误,但不会刮擦网络。
*搜索词是我要搜索的任何关键字,num是我需要检索的页面数。
有人可以帮忙吗? 这是否意味着Google阻止了我的IP被抓取?如果可以的话,请问有什么解决方法或如何解决Google搜索结果的问题?
我需要帮助。 谢谢
答案 0 :(得分:0)
503错误通常表示您要剪贴的网站阻止了您,因为他们不希望非人类用户浏览他们的网站。尤其是Google。
尽管您可以做一些事情。如
基本上,您需要尽可能人性化,以防止网站阻止您。
编辑:
我需要警告您,抓取Google搜索结果与他们的服务条款背道而驰,并且视您的所在位置而定是非法的。
您可以做什么
您可以使用代理轮播服务屏蔽您的请求,以便Google可以将其视为来自多个区域的请求。 Google proxy rotator service
(如果您有兴趣)。可能会很昂贵,具体取决于您对数据的处理方式。
然后编写一些模块,以更改User-Agent
的每个请求,以减少Google对您的请求的怀疑。
在抓取每页后添加随机延迟。我建议1-5秒左右。随机延迟使您的请求更符合Google的要求
最后,如果一切都失败了,您可能希望研究Google搜索API并使用其API,而不是抓取其网站。