PHP CURL页面数据抓取时遇到window.location.href跳转

阅读 (4065)
遇到一个目标网页的防抓的措施,对没有cookie的请求返回了 <script>window.location.href="www.domain.com"</script>类似的JS跳转

本代码仅供PHPer交流学习使用!

本代码仅供PHPer交流学习使用!

本代码仅供PHPer交流学习使用!

一开始以为只要设置 curl CURLOPT_FOLLOWLOCATION,true即可,当抓取时依然返回的果js跳转。

先在浏览器访问目标网站,获取网页cookie,这里获取cookie并不是有些网站的登录的cookie,目标网站不需要登录,但给来访用户都用JS设置了cookie,先判断了cookie是否存在,不存在则返回js跳转代码,所以这里我们直接用浏览器代码审查,查看网络请求,获取网页cookie,然后设置到curl请求中,当然,额外设置下useragent,header等信息,模拟下真实请求

$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_NOBODY, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 20);
curl_setopt($curl, CURLOPT_REFERER, $url);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0');
curl_setopt($curl, CURLOPT_COOKIE, '这里填写浏览器中记录的cookie');
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2']);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip, deflate');

//执行命令
$res = curl_exec($curl);
//关闭URL请求
curl_close($curl);

 

更新于:2018-05-04 10:53:38
返回顶部