PHP-php如何抓取动态页面的数据
http://jipiao.kuxun.cn/beijing-shanghai.html?2012-07-21
现在要抓取酷讯旅游网的机票信息,可是他这个信息是动态生成的貌似调用了ajax
我怎么才能抓取他的信息呢,很奇怪的是在百度上搜还能都到酷讯的机票信息
百度是怎么收录这些动态的信息呢,求解答
百度上搜索“机票 中国国航 CA1857”就能搜出来
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
百度是怎么抓取不太清楚,不过你可以看看它Ajax调用的URL,然后再抓取这个地址,因为Ajax加载的内容本身不在HTML的源代码里显示,所以通过CURL或者是file_get_contents函数都是抓取不到的,不过你可以分析它的源代码及相关规则后再抓取
抓取这个站的数据比较复杂,页面好几块都是异步加载的,页面加载完毕就会有15个左右XHR请求。首先要弄清楚是那个请求返回的是你想要的数据,比如:
http://jipiao.kuxun.cn/internal_v2/ajax.php?from=PEK&to=SHA&date=2012-07-21&queryid=8e99dbcdcc58c75c&action=getSingleData_v3&p=1167634238556&fn_md5=&emptyrec=0&ota_md5=
得先弄清楚每个参数的意思,然后才可以自己构造,直接访问不可以,做了referer验证,抓取这个地址如下代码:
$aContext = array(
'http' => array(
'method' => 'GET',
'header' =>"Referer:http://jipiao.kuxun.cn/beijing-shanghai.htmlrn"
),
);
$cxContext = stream_context_create($aContext);
$cont = file_get_contents("http://jipiao.kuxun.cn/internal_v2/ajax.php?from=PEK&to=SHA&date=2012-07-21&queryid=8e99dbcdcc58c75c&action=getSingleData_v3&p=1167634238556&fn_md5=&emptyrec=0&ota_md5=", False, $cxContext);
echo $cont;
响应的数据完全不知道是啥,需要找对网站相对应的处理数据的js,才能处理出页面显示的效果, 总体来说抓取这个网站有难度。
还有一个思路就是模拟百度去抓取,不知道是否可行
解决方案:直接抓取 http://jipiao.kuxun.cn/beijing-shanghai.html?2012-07-21#page_loc 的内容然后进行 html 分析即可。比如使用方式,代码如下:
这里的 $contents 就是你要获得的页面内容。
当然也可以使用curl等方法获得。个人总结整理了一下,有以下几种常用的用php抓取网页中的内容的方法,可以参考这里: https://www.wenjiangs.com/group/topic-17735.html
1.使用file_get_contents
2.使用curl
3.使用fopen->fread->fclose
最后提醒几点:
1.使用file_get_contents和fopen必须空间开启allow_url_fopen。
方法:
2.使用 curl 必须空间开启curl。
方法: