1

我用 JSoup 为 Java 中的 Google Scholar 制作了一个网络爬虫。刮板在 Scholar 中搜索 DOI 并找到本文的引文。研究需要这些数据。

但是,刮板仅适用于第一个请求。.. 之后,刮板会在 Scholar 网站上遇到验证码。

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

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

  • 为请求选择一个随机用户代理(从 5 个用户代理的列表中)
  • 请求之间的随机延迟在 5-50 秒之间
  • 使用 TOR 代理。然而几乎所有的终端节点都已经被谷歌屏蔽了

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

谢谢!

4

1 回答 1

2

脑海中浮现出三件事:

  1. 您没有在请求之间保存 cookie。您的第一个请求应该保存 cookie 并将其传递给服务器以进行下一个请求(设置 Referer 标头也不会受到伤害)。这里有一个例子。
  2. 如果 Google 很棘手,他们会看到您的第一个请求没有在页面上加载任何 css/js/images。这是一个明确的迹象,表明你是一个机器人。
  3. 加载后,Javascript 会在页面中执行某些操作。

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

于 2013-05-22T11:19:24.923 回答