基于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教程-第一天
Mar 18 PHP
mysql+php分页类(已测)
Mar 31 PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
一个PHP的String类代码
Apr 20 PHP
PHP生成随机密码类分享
Jun 25 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
PHP实现的增强性mhash函数
May 27 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 PHP
laravel框架之数据库查出来的对象实现转化为数组
Oct 23 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设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
浅析php数据类型转换
2014/01/09 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
Javascript倒计时代码
2010/08/12 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
2011/08/28 Javascript
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
Python中import机制详解
2017/11/14 Python
Python找出最小的K个数实例代码
2018/01/04 Python
python线程池threadpool使用篇
2018/04/27 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
python开发入门——set的使用
2020/09/03 Python
python SOCKET编程基础入门
2021/02/27 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
职业规划书如何设计?
2014/01/09 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏