Java web-scraper看到验证码

时间:2013-05-22 07:47:19

标签: java web-scraping jsoup google-scholar

我使用JSoup为Google Scholar for Java制作了一个网络抓取工具。刮刀搜索学者的DOI并找到本文的引文。研究需要这些数据。

但是,刮刀仅适用于第一个请求。 .. 之后,刮刀在学者网站上遇到了验证码。

但是,当我在浏览器(Chrome)中打开网站时,Google学术搜索会正常打开。

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

  • 为请求选择随机用户代理(来自5个用户代理的列表)
  • 请求之间的随机延迟5-50秒
  • 使用TOR代理。但是,几乎所有的终端节点都已被Google阻止

当我分析Chrome向学者提出的请求时,我发现Cookie与某些会话ID一起使用。可能这就是Chrome请求未被阻止的原因。是否可以将此cookie用于使用JSoup进行的请求?

谢谢!

1 个答案:

答案 0 :(得分:2)

有三件事情浮现在脑海中:

  1. 您没有在请求之间保存Cookie。您的第一个请求应该保存cookie并将其传递给服务器以进行下一个请求(设置Referer头也不会受到伤害)。有一个例子here
  2. 如果谷歌很棘手,他们会发现你的第一个请求没有在页面上加载任何css / js / images。这是一个确定的标志,你是一个机器人。
  3. 加载后,Javascript正在页面中执行某些操作。
  4. 我认为第一种是最有可能的选择。您应该尝试将Chrome中请求中看到的多个标头复制到您的java代码中。