基于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 相关文章推荐
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
组合算法的PHP解答方法
Feb 04 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
php类中private属性继承问题分析
Nov 01 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
Nov 14 PHP
常见php数据文件缓存类汇总
Dec 05 PHP
PHP可变函数学习小结
Nov 29 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 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的简单采集数据入库程序【续篇】
2014/07/30 PHP
php上传文件常见问题总结
2015/02/03 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
python实现教务管理系统
2018/03/12 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
Python爬虫文件下载图文教程
2018/12/23 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
优秀幼教自荐信
2014/02/03 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
租房协议书范文
2014/08/20 职场文书
储备店长岗位职责
2015/04/14 职场文书
起诉意见书范文
2015/05/19 职场文书
python实现A*寻路算法
2021/06/13 Python