Java web验证码

Java web验证码,java,web-scraping,jsoup,google-scholar,Java,Web Scraping,Jsoup,Google Scholar,我用JSoup用Java为Google Scholar制作了一个网页刮板。scraper搜索学者的DOI并找到本文的引文。研究需要这些数据 但是,刮刀只适用于第一个请求。。 之后,scraper会在Scholar站点上遇到验证码 但是,当我在浏览器(Chrome)中打开网站时,Google Scholar会正常打开 这怎么可能?所有请求都来自同一IP地址! 到目前为止,我已经尝试了以下选项: 为请求选择随机用户代理(从5个用户代理列表中) 请求之间的随机延迟在5-50秒之间 使用TOR代理。然

我用JSoup用Java为Google Scholar制作了一个网页刮板。scraper搜索学者的DOI并找到本文的引文。研究需要这些数据

但是,刮刀只适用于第一个请求。。 之后,scraper会在Scholar站点上遇到验证码

但是,当我在浏览器(Chrome)中打开网站时,Google Scholar会正常打开

这怎么可能?所有请求都来自同一IP地址! 到目前为止,我已经尝试了以下选项:

  • 为请求选择随机用户代理(从5个用户代理列表中)
  • 请求之间的随机延迟在5-50秒之间
  • 使用TOR代理。然而,几乎所有的终端节点都已经被谷歌屏蔽了
当我分析Chrome向Scholar发出的请求时,我看到一个cookie与一些会话ID一起使用。也许这就是为什么Chrome请求没有被阻止。是否可以将此cookie用于使用JSoup发出的请求


谢谢大家!

我突然想到三件事:

  • 您没有在请求之间保存cookies。您的第一个请求应该保存cookie并将其传递给服务器以供下一个请求使用(设置Referer头也不会有什么坏处)。有一个例子
  • 如果谷歌很狡猾,他们会发现你的第一个请求没有在页面上加载任何css/js/图像。这是一个确定的迹象,表明你是一个机器人
  • Javascript在加载页面后会在页面中执行某些操作

  • 我认为第一个是最有可能的选择。您应该尝试将从Chrome请求中看到的尽可能多的头复制到java代码中

    你的第一点修正了它!我查看了Chrome发出的请求,并在JSoup scraper中复制了所有的头和cookie值。非常感谢。