【问题标题】:Java web-scraper sees captchaJava web-scraper 看到验证码
【发布时间】:2013-05-22 07:47:18
【问题描述】:

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

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: java web-scraping jsoup google-scholar


    【解决方案1】:

    我想到了三件事:

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

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

    【讨论】:

    • 你的第一点解决了它!我查看了 Chrome 发出的请求,并复制了 JSoup 刮板中的所有标头和 cookie 值。谢谢!
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多