基于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 相关文章推荐
图形数字验证代码
Oct 09 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
php递归方法实现无限分类实例代码
Feb 28 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
Yii框架应用组件用法实例分析
May 15 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多个文件上传到服务器实例
2014/10/29 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
输入框过滤非数字的js代码
2014/09/18 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
完美解决iview 的select下拉框选项错位的问题
2018/03/02 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
VUE实现图片验证码功能
2020/11/18 Javascript
python模块restful使用方法实例
2013/12/10 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
利用python实现逐步回归
2020/02/24 Python
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
兼职学生的自我评价
2013/11/24 职场文书
高中军训感言400字
2014/02/24 职场文书
运动会报道稿300字
2014/10/02 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
材料员岗位职责
2015/02/10 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL