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图片加水印原理(超简单的实例代码)
Jan 18 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
php时间戳转换的示例
Mar 31 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
PHP生成plist数据的方法
Jun 16 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
php引用和拷贝的区别知识点总结
Sep 23 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
Aug 26 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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Python深入06——python的内存管理详解
2016/12/07 Python
对python中return和print的一些理解
2017/08/18 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
Python3解释器知识点总结
2019/02/19 Python
Python玩转Excel的读写改实例
2019/02/22 Python
Django框架安装方法图文详解
2019/11/04 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
Python新手学习标准库模块命名
2020/05/29 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
python基于win32api实现键盘输入
2020/12/09 Python
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
工作自荐信
2013/12/11 职场文书
优秀教师事迹简介
2014/02/02 职场文书
电工生产实习心得体会
2016/01/22 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
如何用Python搭建gRPC服务
2021/06/30 Python
AngularJS实现多级下拉框
2022/03/25 Javascript