JSOUP / HTTP错误正在获取URL。状态= 503

时间:2018-08-03 13:41:10

标签: java google-chrome jsoup

我正在使用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搜索结果的问题?

我需要帮助。 谢谢

1 个答案:

答案 0 :(得分:0)

503错误通常表示您要剪贴的网站阻止了您,因为他们不希望非人类用户浏览他们的网站。尤其是Google。

尽管您可以做一些事情。如

  • 使用代理旋转器
  • 使用chromedriver
  • 在每个页面之后为您的应用添加一些延迟

基本上,您需要尽可能人性化,以防止网站阻止您。

编辑:

我需要警告您,抓取Google搜索结果与他们的服务条款背道而驰,并且视您的所在位置而定是非法的。

您可以做什么

您可以使用代理轮播服务屏蔽您的请求,以便Google可以将其视为来自多个区域的请求。 Google proxy rotator service(如果您有兴趣)。可能会很昂贵,具体取决于您对数据的处理方式。

然后编写一些模块,以更改User-Agent的每个请求,以减少Google对您的请求的怀疑。

在抓取每页后添加随机延迟。我建议1-5秒左右。随机延迟使您的请求更符合Google的要求

最后,如果一切都失败了,您可能希望研究Google搜索API并使用其API,而不是抓取其网站。