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下使用无限生命期Session的方法
Mar 16 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
Jun 27 PHP
自己写了一个php检测文件编码的函数
Apr 21 PHP
PHP实现自动登入google play下载app report的方法
Sep 23 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
Symfony核心类概述
Mar 17 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
Yii多表联合查询操作详解
Jun 02 PHP
php实现表单提交上传文件功能
May 28 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
thinkPHP框架乐观锁和悲观锁实例分析
Oct 30 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 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文件的实现方法
2007/03/19 PHP
php 什么是PEAR?(第二篇)
2009/03/19 PHP
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
JavaScript函数详解
2015/02/27 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
python使用正则筛选信用卡
2019/01/27 Python
python通过实例讲解反射机制
2019/10/17 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
python实现堆排序的实例讲解
2020/02/21 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
天游软件面试
2013/11/23 面试题
会计助理的岗位职责
2013/11/29 职场文书
预备党员公开承诺书
2014/05/28 职场文书
公司的力量观后感
2015/06/05 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers