本帖最后由 gz_xudada 于 2018-9-7 21:54 编辑
PHP模拟浏览器访问,抓取非本地文件的几种方法在做一些天气预报或者RSS订阅的程序时,往往需要抓取非本地文件,一般情况下都是利用php模拟浏览器的访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来 1. PHP抓取页面的主要方法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);//输出
?>
效果图:
|