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 相关文章推荐
什么是MVC,好东西啊
May 03 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
PHP 文件上传全攻略
Apr 28 PHP
Thinkphp实现MySQL读写分离操作示例
Jun 25 PHP
php表单提交实例讲解
Nov 12 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
Jun 07 PHP
详解php框架Yaf路由重写
Jun 20 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
针对PHP开发安全问题的相关总结
Mar 22 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
JavaScript代码复用模式实例分析
2012/12/02 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
详解jQuery中的事件
2016/12/14 Javascript
js实现交通灯效果
2017/01/13 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
使用python实现rsa算法代码
2016/02/17 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
Python字符串、整数、和浮点型数相互转换实例
2018/08/04 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
python软件都是免费的吗
2020/06/18 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
高中毕业的自我鉴定
2013/12/09 职场文书
公司募捐倡议书
2014/05/14 职场文书
企业标语口号
2014/06/10 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
销售工作决心书
2015/02/04 职场文书
部门2015年度工作总结
2015/04/29 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python