A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 gz_xudada 于 2018-9-7 21:54 编辑

PHP模拟浏览器访问,抓取非本地文件的几种方法
在做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来
1. PHP抓取页面的主要方法
  • file()函数   
  • file_get_contents()函数  
  • fopen()->fread()->fclose()模式  
  • curl方式  

1.1 file()函数
[PHP] 纯文本查看 复制代码
<?php 
    $url="http://www.itcast.cn";//定义要抓取的url地址
    $lines_array=file($url);//把整个文件读入一个数组中
    $lines_string=implode('',$lines_array);//数组换成为一个字符串
    //htmlspecialchars()函数把预定义的字符转换为 HTML 实体。
    echo htmlspecialchars($lines_string);//输出
?>

效果图:

1.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] 纯文本查看 复制代码
<?php 
    $url="http://www.itcast.cn";//定义要抓取的url地址
    $lines_string=file_get_contents($url);//获取网页的内容
    //htmlspecialchars()函数把预定义的字符转换为 HTML 实体。
    echo htmlspecialchars($lines_string);//输出
?>

效果图:

1.3 fopen()->fread()->fclose()模式
[PHP] 纯文本查看 复制代码
<?php 
    $url="http://www.itcast.cn";//定义要抓取的url地址
    $handle=fopen($url,"rb");//只读方式打开url
    $lines_string="";//定义一个空数组
    do{
        $data=fread($handle,1024);//读取文件
        if(strlen($data)==0) {//判断内容长度是否为0
            break;
        }
        $lines_string.=$data;//拼接字符串
    }while(true);
​
    fclose($handle);//关闭句柄
    //htmlspecialchars()函数把预定义的字符转换为 HTML 实体。
    echo htmlspecialchars($lines_string);//输出
?>

效果图:

1.4 curl方式
使用curl前,需要先开启curl。方法:下修改php.ini,将extension=php_curl.dll前面的分号去掉,而且设置extension_dir扩展目录
[PHP] 纯文本查看 复制代码
<?php 
    $url="http://www.itcast.cn";//定义要抓取的url地址
    $ch=curl_init();//初始化一个cURL会话
    $timeout=5; 
    curl_setopt($ch, CURLOPT_URL, $url);//需要获取的URL地址,也可以在curl_init()函数中设置。
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);//在发起连接前等待的时间,如果设置为0,则无限等待。
    $lines_string=curl_exec($ch);//执行一个cURL会话
    curl_close($ch);//关闭一个cURL会话
    //htmlspecialchars()函数把预定义的字符转换为 HTML 实体。
    echo htmlspecialchars($lines_string);//输出
?>

效果图:

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马