php抓取页面的几种方法详解

 更新时间:2013年06月17日 10:19:25   作者:  
本篇文章是对php抓取页面的几种方法进行了详细的分析介绍,需要的朋友参考下
在 做一些天气预报或者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中base_convert()进制数字转换函数实例

    php中base_convert()进制数字转换函数实例

    这篇文章主要介绍了php中base_convert()进制数字转换函数,以实例形式演示了十进制数与二进制、八进制与十六进制之间的转换方法,具有很好的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • PHP实现搜索相似图片

    PHP实现搜索相似图片

    感知哈希的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。
    2015-09-09
  • 浅谈php和js中json的编码和解码

    浅谈php和js中json的编码和解码

    下面小编就为大家带来一篇浅谈php和js中json的编码和解码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • PHP生成器功能与用法实例分析

    PHP生成器功能与用法实例分析

    这篇文章主要介绍了PHP生成器功能与用法,结合实例形式分析了PHP生成器的概念、功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-03-03
  • php构造函数与析构函数

    php构造函数与析构函数

    PHP析构函数与构造函数是相反的,它们被调用来一个对象从内存中销毁,帮助我们释放对象属性所占用的内存并销毁对象相关的资源。
    2016-04-04
  • PHP高手需要要掌握的知识点

    PHP高手需要要掌握的知识点

    这篇文章主要介绍了PHP高手需要要掌握的知识点,也可说晋升PHP大牛必须要掌握的一些技术,需要的朋友可以参考下
    2014-08-08
  • php下安装配置fckeditor编辑器的方法

    php下安装配置fckeditor编辑器的方法

    以下是我学习PHP时,总结一些安装配置fckeditor在线编辑器最实用的方法。其实调用fckeditor也只有两种调用方法。有什么大家可以在我博客上留言,我有时间会帮大家解答的。
    2011-03-03
  • 深入解析PHP中foreach语句控制数组循环的用法

    深入解析PHP中foreach语句控制数组循环的用法

    这篇文章主要介绍了深入解析PHP中foreach语句控制数组循环的用法,是PHP入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位

    php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位

    each() 函数生成一个由数组当前内部指针所指向的元素的键名和键值组成的数组,并把内部指针向前移动。返回的数组中包括的四个元素:键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据
    2011-10-10
  • 使用systemd设置PHP程序为服务的配置步骤

    使用systemd设置PHP程序为服务的配置步骤

    在现代 Linux 系统中,systemd 是用于管理和控制服务的标准工具,通过 systemd,我们可以轻松地将 PHP 程序配置为后台运行的系统服务,本文将介绍如何为 PHP 程序设置 systemd 服务单元,并涵盖相关配置步骤,需要的朋友可以参考下
    2024-10-10

最新评论