php抓取页面的几种方法详解


Posted in PHP onJune 17, 2013

在 做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来。
下面简单说一下php抓取页面的几种方法及原理:
一、 PHP抓取页面的主要方法:
1. file()函数   
2. file_get_contents()函数 
3. fopen()->fread()->fclose()模式 
4.curl方式 
5. fsockopen()函数 socket模式 
6. 使用插件(如:http://sourceforge.net/projects/snoopy/)

二、PHP解析html或xml代码主要方式:
1. file()函数

<?php 
$url='http://t.qq.com'; 
$lines_array=file($url); 
$lines_string=implode('',$lines_array); 
echo htmlspecialchars($lines_string);

2. file_get_contents()函数
使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置 allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。
<?php 
$url='http://t.qq.com'; 
$lines_string=file_get_contents($url); 
echo htmlspecialchars($lines_string);

3. fopen()->fread()->fclose()模式
<?php 
$url='http://t.qq.com'; 
$handle=fopen($url,"rb"); 
$lines_string=""; 
do{ 
    $data=fread($handle,1024);
     if(strlen($data)==0) {
        break;
    } 
    $lines_string.=$data; 
}while(true); 
fclose($handle); 
echo htmlspecialchars($lines_string);

4. curl方式
使用curl必须空间开启curl。方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且需 要拷贝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安装curl扩展。
<?php 
$url='http://t.qq.com'; 
$ch=curl_init(); 
$timeout=5; 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
$lines_string=curl_exec($ch); 
curl_close($ch); 
echo htmlspecialchars($lines_string);

5. fsockopen()函数 socket模式
socket模式能否正确执行,也跟服务器的设置有关系,具体可以通过phpinfo查看服务器开启了哪些通信协议,比如我的本地php socket没开启http,只能使用udp测试一下了。
<?php                                                                                                                                                
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) { 
    echo "ERROR: $errno - $errstr<br />\n"
} else { 
    fwrite($fp, "\n")
    echo fread($fp, 26)
    fclose($fp)
} 

6. 插件
网上应该有比较多的插件,snoopy插件是在网上搜到的,有兴趣的可以研究一下。
PHP 相关文章推荐
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
学习php分页代码实例
Oct 24 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
PHP abstract 抽象类定义与用法示例
May 29 PHP
php面试中关于面向对象的相关问题
Feb 13 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 PHP
深入PHP magic quotes的详解
Jun 17 #PHP
php错误级别的设置方法
Jun 17 #PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 #PHP
修改php.ini以达到屏蔽错误信息并记录日志
Jun 16 #PHP
php fsockopen伪造post与get方法的详解
Jun 14 #PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 #PHP
PHP可变函数的使用详解
Jun 14 #PHP
You might like
坏狼的PHP学习教程之第1天
2008/06/15 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
canvas时钟效果
2017/02/16 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
js实现简易计算器功能
2019/10/18 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
Python实现基本线性数据结构
2016/08/22 Python
python使用matplotlib绘制折线图教程
2017/02/08 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
高三毕业寄语
2014/04/10 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
红色故事汇观后感
2015/06/18 职场文书
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技