基于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产生动态的影像图
Oct 09 PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
php 生成WML页面方法详解
Aug 09 PHP
php模板中出现空行解决方法
Mar 08 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
PHP中单引号与双引号的区别分析
Aug 19 PHP
php生成gif动画的方法
Nov 05 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
Thinkphp实现短信验证注册功能
Oct 18 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
php 数组元素快速去重
May 05 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 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
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
php跨站攻击实例分析
2014/10/28 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
干货!教大家如何选择Vue和React
2017/03/13 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
Python面向对象程序设计示例小结
2019/01/30 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
python利用faker库批量生成测试数据
2020/10/15 Python
python opencv实现图像配准与比较
2021/02/09 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
计算机相关的自我评价
2014/01/15 职场文书
党员岗位承诺书
2014/03/25 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
保密承诺书
2014/03/27 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
Python 实现Mac 屏幕截图详解
2021/10/05 Python
Python Matplotlib库实现画局部图
2021/11/17 Python