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 相关文章推荐
学习discuz php 引入文件的方法DISCUZ_ROOT
Jun 21 PHP
destoon实现底部添加你是第几位访问者的方法
Jul 15 PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
php中Redis的应用--消息传递
Mar 28 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
Jun 04 PHP
Yii2压缩PHP中模板代码的输出问题
Aug 28 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 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 图片上传实现代码 带详细注释
2010/04/29 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
js微信分享API
2020/10/11 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
微信小程序动态设置图片大小的方法
2019/11/21 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Python 下载及安装详细步骤
2019/11/04 Python
python 实现aes256加密
2020/11/27 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
环保公益广告语
2014/03/13 职场文书
宣传口号大全
2014/06/16 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
教师节倡议书
2014/08/30 职场文书
客户经理岗位职责
2015/01/31 职场文书
方法汇总:Python 安装第三方库常用
2022/04/26 Python