基于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获取当前网址url并替换参数或网址的方法
Jun 06 PHP
Windows下XDebug 手工配置与使用说明
Jul 11 PHP
微博短链接算法php版本实现代码
Sep 15 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
php中的curl_multi系列函数使用例子
Jul 29 PHP
php提取字符串中网站url地址的方法
Dec 03 PHP
php猜单词游戏
Sep 29 PHP
php插入含有特殊符号数据的处理方法
Nov 24 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 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/10/10 PHP
Admin generator, filters and I18n
2011/10/06 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
JS简单计算器实例
2015/01/20 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
React组件的三种写法总结
2017/01/12 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
用Python编写简单的定时器的方法
2015/05/02 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
scrapy-splash简单使用详解
2021/02/21 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
幼师求职自荐信
2014/05/31 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书