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

问题描述 投票:0回答:1

我正在使用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谷歌搜索结果,拜托?

我需要帮助。谢谢,

java google-chrome jsoup
1个回答
0
投票

503错误通常意味着您尝试废弃的网站阻止了您,因为他们不希望非人类用户导航他们的网站。特别是谷歌。

但是你可以做些什么。如

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

基本上你需要尽可能的人,以防止网站阻止你。

编辑:

我需要警告你,刮取Google搜索结果是违反他们的ToS而且可能是非法的取决于你的位置。

你可以做什么

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

然后编写一些模块,在每个请求中更改User-Agent,以使Google不再对您的请求产生怀疑。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.