基于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&&mysql)三
Oct 09 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
根据ip调用新浪api获取城市名并转成拼音
Mar 07 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
PHP加密解密函数详解
Oct 28 PHP
PHP6新特性分析
Mar 03 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
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下实现伪 url 的超简单方法[转]
2007/09/24 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
python浪漫表白源码
2019/04/05 Python
Python中如何导入类示例详解
2019/04/17 Python
python实现日志按天分割
2019/07/22 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
Python 图片处理库exifread详解
2021/02/25 Python
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
食堂采购员岗位职责
2014/03/17 职场文书
图书馆标语
2014/06/19 职场文书
岗位工作说明书
2014/07/29 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
小学庆六一主持词
2015/06/30 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
Vue2.0搭建脚手架
2022/03/13 Vue.js
HTML常用标签超详细整理
2022/03/19 HTML / CSS
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server