基于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验证码(支持中文)
Feb 14 PHP
Laravel框架表单验证详解
Sep 04 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
php第一次无法获取cookie问题处理
Dec 15 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
Dec 17 PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
iOS10推送通知开发教程
Sep 19 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
php中各种定义变量的方法小结
Oct 18 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 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生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
Python 解析XML文件
2009/04/15 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
Python入门教程之运算符与控制流
2016/08/17 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Python列表对象实现原理详解
2019/07/01 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
基层干部十八大感言
2014/01/19 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
班长演讲稿范文
2014/04/24 职场文书
理财计划书
2014/08/14 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
幼儿园六一主持词
2015/06/30 职场文书
2016年校长新年寄语
2015/08/17 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript