php抓取页面与代码解析 推荐


Posted in PHP onJuly 23, 2010

得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来。
下面先简单说一下本文的主要内容:

一、 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. 正则表达式
2. PHP DOMDocument对象
3. 插件(如:PHP Simple HTML DOM Parser)

如果你对以上内容已经很了解,以下内容可以飘过......

PHP抓取页面

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解析xml(html)

1. 正则表达式:

<?php 
$url='http://t.qq.com'; 
$lines_string=file_get_contents($url); 
eregi('<title>(.*)</title>',$lines_string,$title); 
echo htmlspecialchars($title[0]); 
?>

2. PHP DOMDocument()对象
如果远程的html或xml存在语法错误,php在解析dom的时候会报错。

<?php 
$url='http://www.136web.cn'; 
$html=new DOMDocument(); 
$html->loadHTMLFile($url); 
$title=$html->getElementsByTagName('title'); 
echo $title->item(0)->nodeValue; 
?>

3. 插件
本文以PHP Simple HTML DOM Parser为例,进行简单介绍,simple_html_dom的语法类似jQuery,它让php操作dom,就像使用jQuery操作dom一样的简单。

<?php 
$url='http://t.qq.com'; 
include_once('../simplehtmldom/simple_html_dom.php'); 
$html=file_get_html($url); 
$title=$html->find('title'); 
echo $title[0]->plaintext; 
?>

当然中国人是富有创造性的,老外往往会在技术上领先,但中国人往往会在使用上更胜一筹,往往做出一些让老外不敢想的功能,比如php的远程抓取与分析,本来是为数据的整合提供方便。但国人很喜欢这个,于是乎大量的采集站,它们本身不创造任何有价值的内容,就是靠抓取别人的网站内容,并把它据为己有。在百度里输入“php小”关键词,suggest列表第一个就是“php小偷程序”,然后把同样的关键词放入google,哥只能笑而不语。

PHP 相关文章推荐
PHP 编程安全性小结
Jan 08 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
PHP实现远程下载文件到本地
May 17 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
php 的反射详解及示例代码
Aug 25 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
PHP常量define和const的区别详解
May 18 PHP
laravel框架中间件简单使用方法示例
Jan 25 PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 PHP
由php的call_user_func传reference引发的思考
Jul 23 #PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 #PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 #PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 #PHP
PHP垃圾回收机制简单说明
Jul 22 #PHP
PHP多线程抓取网页实现代码
Jul 22 #PHP
php上传文件的增强函数
Jul 21 #PHP
You might like
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
php创建session的方法实例详解
2015/01/27 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
JqGrid web打印实现代码
2011/05/31 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
python复合条件下的字典排序
2020/12/18 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
北京天润融通.net面试题笔试题
2012/02/20 面试题
what is the difference between ext2 and ext3
2015/08/25 面试题
学生处主任岗位职责
2013/12/01 职场文书
运动会领导邀请函
2014/02/05 职场文书
语文教育专业求职信
2014/06/28 职场文书
2014年校长工作总结
2014/12/11 职场文书
教代会开幕词
2015/01/28 职场文书
歼十出击观后感
2015/06/11 职场文书
入党心得体会
2019/06/20 职场文书