当前位置: 首页 > 知识库问答 >
问题:

JSOUP/HTTP获取URL时出错。状态=503

羊柏
2023-03-14

我使用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)它可以正常工作,但不会刮伤web。

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

有人能帮忙吗?这是否意味着谷歌阻止了我的IP刮取?如果是的话,请问有什么解决方案或者我如何替换谷歌搜索结果?

我需要帮助。谢谢你,

共有1个答案

孟鹤龄
2023-03-14

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

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

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

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

编辑:

我需要提醒你,刮谷歌搜索结果是违反他们的ToS的,可能是非法的,这取决于你在哪里。

你所能做的

您可以使用代理旋转服务来掩盖您的请求,以便谷歌将其视为来自多个区域的请求。如果您感兴趣,请使用Google代理旋转器服务。它可能很昂贵,这取决于您如何处理数据。

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

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

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

 类似资料:
  • 我正在尝试从这里连接并检索页面标题。如果我从链接中删除“.com”之后的所有内容,代码运行良好。以下代码不起作用: 如果代码有效,返回的标题应该是“Sammamish Washington-Google News”。代码返回的错误是:“org.jsoup.HttpStatusException:HTTP错误获取URL。状态=405,URL=https://news.google.com/news/

  • 我只是下载了最新版本的j汤(1.7.1)并遵循官方代码(更改了url)。然后我得到了“超文本传输协议错误获取url” 我的代码有什么问题?似乎错误只是发生在Android项目,因为我在一个工作正常的Java项目做同样的事情。 注意:-我已经添加了Internet权限

  • 我想连接到https://www.notebooksbilliger.de/但对于以下代码,它不起作用: 为什么我得到405状态?我如何解决这个问题? 非常感谢... 塞巴斯蒂安

  • JSoup似乎可以处理我尝试过的所有URL,但这一个给了我400个错误。 我得到的错误是:

  • 我一直在寻找这个问题,假设这个问题是使用用户代理修复的,但事实并非如此<我要做的是从请愿书中取出cookies,这是代码 程序在第

  • 我正在尝试登录一个网站(https://dashboard.ngrok.com/user/login)使用jsoup。我对GET请求没有任何问题,但当我尝试使用凭证执行POST请求时,我收到: HTTP错误获取URL。状态=400 我尝试为请求设置一个更好的头,使用我在连接发出POST请求时发送的相同参数。 我也尝试过这种类型的请求: 结果显示: 线程“main”组织中出现异常。jsoup。Htt