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 页面编码声明方法详解(header或meta)
Mar 12 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
Mar 27 PHP
深入php之规范编程命名小结
May 15 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
iOS10推送通知开发教程
Sep 19 PHP
详解PHP中的序列化、反序列化操作
Mar 21 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
php实现推荐功能的简单实例
Sep 29 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 12 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 PHP
设定php简写功能的方法
Nov 28 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
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
php中Snoopy类用法实例
2015/06/19 PHP
浅谈php7的重大新特性
2015/10/23 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
JS继承 笔记
2011/07/13 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
分析经典Python开发工程师面试题
2019/04/08 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
单位介绍信范文
2014/01/18 职场文书
出纳员的岗位职责
2014/02/22 职场文书
生产文员岗位职责
2014/04/05 职场文书
个人委托书范文
2015/01/28 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript