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


Posted in PHP onApril 28, 2013

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

大致大纲:

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));

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

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

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

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

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

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

看来还要传送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);

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

 

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

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

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

这样也可以正常的采集
PHP 相关文章推荐
基于PHP与XML的PDF文档生成技术
Oct 09 PHP
谈谈PHP语法(4)
Oct 09 PHP
PHP VS ASP
Oct 09 PHP
对javascript和select部件的结合运用
Oct 09 PHP
逐步提升php框架的性能
Jan 10 PHP
PHP MSSQL 存储过程的方法
Dec 24 PHP
PHP OPCode缓存 APC详细介绍
Oct 12 PHP
PHP Directory 函数的详解
Mar 07 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
php字符串的替换,分割和连接方法
May 23 PHP
php创建类并调用的实例方法
Sep 25 PHP
imagettftext() 失效,不起作用
Mar 09 PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 #PHP
PHP基础学习之流程控制的实现分析
Apr 28 #PHP
PHP基础之运算符的使用方法
Apr 28 #PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 #PHP
PHP数据类型之布尔型的介绍
Apr 28 #PHP
PHP中最容易忘记的一些知识点总结
Apr 28 #PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 #PHP
You might like
java微信开发之上传下载多媒体文件
2016/06/24 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
python文件比较示例分享
2014/01/10 Python
Python中的进程分支fork和exec详解
2015/04/11 Python
python机器学习之神经网络(三)
2017/12/20 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
详解python配置虚拟环境
2019/04/08 Python
详解Python 函数如何重载?
2019/04/23 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
简单了解django缓存方式及配置
2019/07/19 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
python logging 日志的级别调整方式
2020/02/21 Python
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
机修工岗位职责
2013/11/24 职场文书
小学教学随笔感言
2014/02/26 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
中学生检讨书范文
2014/11/03 职场文书
2014年党总支工作总结
2014/12/18 职场文书
工程款催款函
2015/06/24 职场文书
小学班主任工作随笔
2015/08/15 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python