基于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编程最快明白》第三讲:php数组
Nov 01 PHP
php URL验证正则表达式
Jul 19 PHP
解析MySql与Java的时间类型
Jun 22 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
php上传图片类及用法示例
May 11 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
Aug 10 PHP
PHP常用字符串函数小结(推荐)
Aug 05 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 连接mysql连接被重置的解决方法
2011/02/15 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
Jquery cookie操作代码
2010/03/14 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
Python发展简史 Python来历
2019/05/14 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
厨师岗位职责
2013/11/12 职场文书
安全技术说明书
2014/05/09 职场文书
师范生自荐信模板
2014/05/28 职场文书
公司转让协议书
2016/03/19 职场文书
如何在Python中创建二叉树
2021/03/30 Python
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript