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 相关文章推荐
一个基于PDO的数据库操作类
Mar 24 PHP
PHP SEO优化之URL优化方法
Apr 21 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
php列出一个目录下的所有文件的代码
Oct 09 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
PHP 验证登陆类分享
Mar 13 PHP
PHP发送AT指令实例代码
May 26 PHP
PHP中的表达式简述
May 29 PHP
Laravel中间件实现原理详解
Oct 09 PHP
php常用正则函数实例小结
Dec 29 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
js实现放大镜特效
2017/05/18 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
使用pandas读取csv文件的指定列方法
2018/04/21 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
django 类视图的使用方法详解
2019/07/24 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
python实现人脸签到系统
2020/04/13 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
教学器材管理制度
2014/01/26 职场文书
环保建议书300字
2014/05/14 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
举起手来观后感
2015/06/09 职场文书
心得体会格式及范文
2016/01/25 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
React forwardRef的使用方法及注意点
2021/06/13 Javascript
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server
APP界面设计技巧和注意事项
2022/04/29 杂记