基于curl数据采集之单页面采集函数get_html的使用
这是一个系列 没办法在一两天写完 所以一篇一篇的发布 大致大纲:1.curl数据采集系列之单页面采集函数get_html 2.curl数据采集系列之多页面并行采集函数get_htmls 3.curl数据采集系列之正则处理函数get _matches 4.curl数据采集系列之代码分离 5.curl数据采集系列之并行逻辑控制函数web_spider
百度和网易比较熟悉 所以拿这两个网站首页采集来做例子讲解 最简单的写法: 代码如下: $url = 'http://www.baidu.com'; $ch = curl_init($url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_TIMEOUT,5); $html = curl_exec($ch); if($html !== false){ echo $html; } 由于使用频繁 可以利用curl_setopt_array写成函数的形式: 代码如下: function get_html($url,$options = array()){ $options[CURLOPT_RETURNTRANSFER] = true; $options[CURLOPT_TIMEOUT] = 5; $ch = curl_init($url); curl_setopt_array($ch,$options); $html = curl_exec($ch); curl_close($ch); if($html === false){ return false; } return $html; } 代码如下: $url = 'http://www.baidu.com'; echo get_html($url); 有时候需要传递一些特定的参数才能得到正确的页面 如现在要得到网易的页面: 代码如下: $url = 'http://www.163.com'; echo get_html($url); 会看到一片空白 什么也没有 那么再利用curl_getinfo写一个函数 看看发生了什么: 代码如下: function get_info($url,$options);
$html = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); return $info; } $url = 'http://www.163.com'; var_dump(get_info($url)); 可以看到 会发现怎么是这样的一个页面和我们电脑访问的不同??? 看来参数还是不够不够服务器判断我们的客户端是什么设备上的就返回了个普通版 看来还要传送 OK 当然也有另外的办法可以实现,当你明确的知道网易的网页的时候就可以简单采集了: 代码如下: $url = 'http://www.163.com/index.html'; echo get_html($url); 这样也可以正常的采集 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |