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新手上路(十)
Oct 09 PHP
实用函数7
Nov 08 PHP
PHP开发中四种查询返回结果分析
Jan 02 PHP
PHP中实现中文字符进制转换原理分析
Dec 06 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
cakephp打印sql语句的方法
Feb 13 PHP
常用PHP数组排序函数归纳
Aug 08 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
Swoole4.4协程抢占式调度器详解
May 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
php中Smarty模板初体验
2011/08/08 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
基于jQuery实现表格的排序
2016/12/02 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
JS随机密码生成算法
2019/09/23 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python实现封装得到virustotal扫描结果
2014/10/05 Python
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
python调用摄像头显示图像的实例
2018/08/03 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
解决python线程卡死的问题
2019/02/18 Python
Python文件读写常见用法总结
2019/02/22 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
Python requests接口测试实现代码
2020/09/08 Python
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
党性教育心得体会
2014/09/03 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
勇敢的心观后感
2015/06/09 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers