Rumah >pembangunan bahagian belakang >tutorial php >抓取不到html,curl和file_get_contents都抓不到,但是页面可以直接打开。
抓取不到html,curl和file_get_contents都抓不到,但是页面可以直接打开。
请教
网址如下
https:/count.taobao.com/counter3?keys=SM_368_dsr-1097280647,ICCP_1_522177046867&callback=jsonp107
为什么我怎么都抓不到内容呢,始终是空
贴出你的代码来看看
$ch = curl_init();$url='https://count.taobao.com/counter3?keys=SM_368_dsr-1097280647,ICCP_1_522177046867&callback=jsonp107';curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);curl_setopt($ch, CURLOPT_HEADER, 0);$output = curl_exec($ch);curl_close($ch);echo $output;
试试 curl 设置下 CURLOPT_USERAGENT,浏览器标识
$ch = curl_init();$url='https://count.taobao.com/counter3?keys=SM_368_dsr-1097280647,ICCP_1_522177046867&callback=jsonp107';curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);curl_setopt($ch, CURLOPT_HEADER, 0);$output = curl_exec($ch);curl_close($ch);echo $output;
他不过是返回了一个供 jsonp 调用的函数:
jsonp107({"SM_368_dsr-1097280647":{v:0,nv:100,m_UFB:0,m:4.89661,m_g:20.15,s_UFB:0,s:4.8744,s_g:31.49,c_UFB:0,c:4.87867,c_g:39.55,gp:100.00,ss:290159,hdr:true},"ICCP_1_522177046867":4914});
截取圆括号中间的内容,用 json_decode 函数解码即可
他不过是返回了一个供 jsonp 调用的函数:
jsonp107({"SM_368_dsr-1097280647":{v:0,nv:100,m_UFB:0,m:4.89661,m_g:20.15,s_UFB:0,s:4.8744,s_g:31.49,c_UFB:0,c:4.87867,c_g:39.55,gp:100.00,ss:290159,hdr:true},"ICCP_1_522177046867":4914});
截取圆括号中间的内容,用 json_decode 函数解码即可
拿去玩吧,
<?php//$jsonp=file_get_contents('https://count.taobao.com/counter3?keys=SM_368_dsr-1097280647,ICCP_1_522177046867&callback=jsonp107');$jsonp='jsonp107({"SM_368_dsr-1097280647":{v:0,nv:100,m_UFB:0,m:4.89661,m_g:20.15,s_UFB:0,s:4.8744,s_g:31.49,c_UFB:0,c:4.87867,c_g:39.55,gp:100.00,ss:290159,hdr:true},"ICCP_1_522177046867":4915});';preg_match_all('/\d{1,}}/',$jsonp,$arr);echo trim($arr[0][0],'}');
更新:
<?php//$jsonp=file_get_contents('https://count.taobao.com/counter3?keys=SM_368_dsr-1097280647,ICCP_1_522177046867&callback=jsonp107');$jsonp='jsonp107({"SM_368_dsr-1097280647":{v:0,nv:100,m_UFB:0,m:4.89661,m_g:20.15,s_UFB:0,s:4.8744,s_g:31.49,c_UFB:0,c:4.87867,c_g:39.55,gp:100.00,ss:290159,hdr:true},"ICCP_1_522177046867":4915});';preg_match_all('/\d{1,}/',$jsonp,$arr);echo array_reverse($arr[0])[0];
敢不敢下次提问标题起个好点的名字,自己不会玩扯函数不行
<meta charset="utf-8"><?php $ch = curl_init();$url='https://count.taobao.com/counter3?keys=SM_368_dsr-1097280647,ICCP_1_522177046867&callback=jsonp107';curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);curl_setopt($ch, CURLOPT_HEADER, 0);$output = curl_exec($ch);curl_close($ch);preg_match_all("/(?:\()(.*)(?:\))/i", $output, $ok);$str=$ok[1][0];$str=str_replace('{"',"{",$str);$str=str_replace('":',":",$str);$str=str_replace(',"',",",$str);//不会正则只能这样苦逼的替换了。。反正就是把他重构为json格式$str=str_replace('{','{"',$str);$str=str_replace(':','":',$str);$str=str_replace(',',',"',$str);$obj=json_decode($str);var_dump($obj);echo "这是你要的ICCP_1_522177046867:".$obj->ICCP_1_522177046867;?>