PHP爬取一个使用cloudflare的网站

Posted

技术标签:

【中文标题】PHP爬取一个使用cloudflare的网站【英文标题】:PHP crawl a website, which is using 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。) 【参考方案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();
);

【讨论】:

以上是关于PHP爬取一个使用cloudflare的网站的主要内容,如果未能解决你的问题,请参考以下文章

php curl 使用 cloudflare 2021 访问网站

python+undetected_chromedriver+chrome绕过五秒盾(cloudflare)

PHP网站加速器-Cloudflare风格的完整页面缓存,在1个PHP文件中使用页面规则

使用cloudflare时的php邮件和SMTP

CloudFlare 并通过 PHP 记录访问者 IP 地址

如何“动态”在 PHP 中向 cloudflare 添加子域?