首页 > 解决方案 > JSOUP / HTTP 错误获取 URL。状态=503

问题描述

我正在使用 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 error fetching URL. Status=503 error”。

当我添加 .ignoreHttpErrors(true) 时,它可以正常工作,但不会抓取网页。

*search term 是我要搜索的任何关键字,num 是我需要检索的页数。

有人可以帮忙吗?这是否意味着谷歌阻止了我的 IP 抓取?如果是的话,请问有什么解决方案或我如何浏览谷歌搜索结果吗?

我需要帮助。谢谢,

标签: javagoogle-chromejsoup

解决方案


503 错误通常意味着您尝试废弃的网站会阻止您,因为他们不希望非人类用户浏览他们的网站。尤其是谷歌。

不过,您可以做一些事情。如

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

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

编辑:

我需要警告您,抓取 Google 搜索结果违反了他们的服务条款,并且可能是非法的,这取决于您所在的位置。

你可以做什么

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

然后编写一些模块来更改User-Agent每个请求,以使 Google 对您的请求不那么怀疑。

抓取每一页后添加随机延迟。我建议大约 1-5 秒。随机延迟使您的请求对 Google 来说更人性化

最后,如果一切都失败了,您可能想要查看 Google 搜索 API 并使用他们的 API 而不是抓取他们的网站。


推荐阅读