基于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自动选择 连接本地还是远程数据库
Dec 02 PHP
php urlencode()与urldecode()函数字符编码原理详解
Dec 06 PHP
学习php分页代码实例
Oct 24 PHP
php数组合并的二种方法
Mar 21 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
学习PHP Cookie处理函数
Aug 09 PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 PHP
如何用RabbitMQ和Swoole实现一个异步任务系统
May 29 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连接SQLServer2005 的问题解决方法
2010/07/19 PHP
PHP中的integer类型使用分析
2010/07/27 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
jquery 滚动条事件简单实例
2013/07/12 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
JS中的三个循环小结
2017/06/20 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
电子商务专业实习生自我鉴定
2013/09/24 职场文书
计算机个人求职信范例
2014/01/24 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书