基于curl数据采集之单页面采集函数get_html的使用

 更新时间:2013年04月28日 17:06:58   作者:  
在做数据采集时经常要使用到curl+正则的方式采集需要的数据 根据自己的工作经验 把自己写的一些常用自定义函数 与大家来分享 如果有写得不恰当的地方 请多多指教

这是一个系列 没办法在一两天写完 所以一篇一篇的发布

大致大纲:

1.curl数据采集系列之单页面采集函数get_html

2.curl数据采集系列之多页面并行采集函数get_htmls

3.curl数据采集系列之正则处理函数get _matches

4.curl数据采集系列之代码分离

5.curl数据采集系列之并行逻辑控制函数web_spider


单页面采集在数据采集过程中是最常用的一个功能 有时在服务器访问限制的情况下 只能使用这种采集方式 慢 但是可以简单的控制 所以写好一个常用的curl函数调用是很重要的

百度和网易比较熟悉 所以拿这两个网站首页采集来做例子讲解


最简单的写法:

复制代码 代码如下:

$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 = array()){
     $options[CURLOPT_RETURNTRANSFER] = true;
     $options[CURLOPT_TIMEOUT] = 5;
     $ch = curl_init($url);
     curl_setopt_array($ch,$options);
     $html = curl_exec($ch);
     $info = curl_getinfo($ch);
     curl_close($ch);
     return $info;
 }
 $url = 'http://www.163.com';
 var_dump(get_info($url));

可以看到http_code 302 重定向了 这时候就需要传递一些参数了:

复制代码 代码如下:

$url = 'http://www.163.com';
$options[CURLOPT_FOLLOWLOCATION] = true;
echo get_html($url,$options);

会发现 怎么是这样的一个页面 和我们电脑访问的不同???

看来参数还是不够 不够服务器判断我们的客户端是什么设备上的 就返回了个普通版

看来还要传送USERAGENT

复制代码 代码如下:

$url = 'http://www.163.com';
 $options[CURLOPT_FOLLOWLOCATION] = true;
 $options[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0';
 echo get_html($url,$options);

 

OK现在页面已经出来了 这样基本这个get_html函数基本能实现这样扩展的功能

当然也有另外的办法可以实现,当你明确的知道网易的网页的时候就可以简单采集了:

复制代码 代码如下:

 $url = 'http://www.163.com/index.html';
 echo get_html($url);

这样也可以正常的采集

相关文章

  • php使用strtotime和date函数判断日期是否有效代码分享

    php使用strtotime和date函数判断日期是否有效代码分享

    php使用strtotime和date函数进行检验判断日期是否有效代码分享,大家参考使用吧
    2013-12-12
  • php基于curl扩展制作跨平台的restfule 接口

    php基于curl扩展制作跨平台的restfule 接口

    这篇文章主要介绍了php基于curl扩展制作跨平台的restfule 接口的相关资料以及详细的代码,有需要的小伙伴可以参考下。
    2015-05-05
  • php导入模块文件分享

    php导入模块文件分享

    本文给大家分享的是php导入模块文件分享,主要参数有导入文件路径字符串,可以用"."代替"/", 导入文件类型的扩展名(带"."号),也可以是class/inc(简写方式), 如果导入成功则返回true,否则返回异常对象,有需要的小伙伴参考下吧。
    2015-03-03
  • PHP微信支付实例解析

    PHP微信支付实例解析

    这篇文章主要为大家详细介绍了PHP微信支付实例,包括PHP微信支付源码,PHP微信退款源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • php过滤HTML标签、属性等正则表达式汇总

    php过滤HTML标签、属性等正则表达式汇总

    这篇文章主要介绍了php过滤HTML标签、属性等正则表达式汇总,本文使用代码实例给出了过滤HTML内容的正则表达式,具体说明请参阅代码中的注释,本文对使用PHP做采集的朋友有比较大的作用,需要的朋友可以参考下
    2014-09-09
  • Laravel框架实现定时Task Scheduling例子

    Laravel框架实现定时Task Scheduling例子

    今天小编就为大家分享一篇Laravel框架实现定时Task Scheduling例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 收藏的一个php小偷的核心程序

    收藏的一个php小偷的核心程序

    收藏的一个php小偷的核心程序...
    2007-04-04
  • PHP通过curl获取接口URL的数据方法

    PHP通过curl获取接口URL的数据方法

    今天小编就为大家分享一篇PHP通过curl获取接口URL的数据方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】

    Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】

    这篇文章主要介绍了Yii框架使用PHPExcel导出Excel文件的方法,结合实例形式分析了Yii框架配置、导入PHPExcel组件以及调用PHPExcel导出Excel文件的相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • 为百度UE编辑器上传图片添加水印功能

    为百度UE编辑器上传图片添加水印功能

    前些日子把phpcms的内置编辑器改成了百度UE编辑器,非常好用,但是有个地方不是很满意,就是没法给上传的图片加水印了,经过一番研究终于实现了出来,分享给大家。
    2015-04-04

最新评论