【问题标题】:PHP crawl a website, which is using cloudflarePHP爬取一个使用cloudflare的网站
【发布时间】:2015-09-19 20:05:18
【问题描述】:

我想从网站(不是我自己的网站)中抓取一些特定的值(例如新闻文本)。

file_get_contents() 不工作,可能被 php.ini 阻止。

所以我尝试用 curl 来做,问题是:
我得到的只是来自 cloudflare 的重定向文本。
我的爬虫应该执行以下操作:
转到页面 -> 等待 5 秒 cloudflare 重定向 -> 卷曲页面。

任何想法如何在 cloudfare 等待时间后抓取页面? (在 PHP 中)

编辑:所以我尝试了很多东西,问题还是一样。
更具体:它只抓取 cloudflare 重定向页面。 (所以我得到一个重定向到主机的页面,cloudflare 在前面。当我在本地主机上卷曲时,它需要本地主机,所以重定向是 obv 不起作用。) 有没有办法在“卷曲”5秒后开始保存返回数据?

【问题讨论】:

  • 您要爬取哪个网站?
  • 在工作的浏览器中观察标头,并在您的脚本中使用相同的标头。
  • @machineaddict 我会试试的
  • CloudFlare 的一项服务是机器人检测和阻止。不要指望在 CF 站点上卷曲能够可靠地工作。
  • @Dagon 很有帮助! (顺便说一句,我很确定,他们只想保护 vs ddos​​,每天提取一次数据并没有错。此外,如果我想窃取数据,为什么要使用 curl。)

标签: php curl web-crawler cloudflare


【解决方案1】:

首先,您应该检查浏览器在该站点上的正常行为。什么是重定向和 cookie。

然后,您需要设置 curl 脚本来收集“cookie jar”中的所有 cookie 并自动跟踪重定向。

那你应该做一些测试。

希望这会有所帮助。

注意:

  • Cloudflare 拥有良好的基础架构来阻止像您这样的人。他们可以做验证码挑战或类似的事情。

  • 优秀的系统管理员迟早会发现你在做什么,并会阻止你的 IP 或你的用户代理。

【讨论】:

    【解决方案2】:

    “转到页面 -> 等待 5 秒 cloudflare 重定向 -> 卷曲页面。”

    5 秒插页式页面实际上要求在访问者通过检查之前启用 JavaScript 和 cookie,如果您使用爬虫或机器人访问该网站,这可能不起作用。

    【讨论】:

      【解决方案3】:

      你应该使用phantomjs

      echo shell_exec('phantomjs example.js')
      

      example.js

      var page = require('webpage').create();
      var url = 'http://www.google/';
      page.open(url, function (status) {
        console.log(page.content)
        phantom.exit();
      });
      

      【讨论】:

        猜你喜欢
        • 2012-09-24
        • 2011-10-09
        • 2012-04-23
        • 2021-07-24
        • 1970-01-01
        • 1970-01-01
        • 2018-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多