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 相关文章推荐
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
php多层数组与对象的转换实例代码
Aug 05 PHP
PHP中的Memcache详解
Apr 05 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
Feb 19 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
Oct 24 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
基于jquery的loading效果实现代码
2010/11/05 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
Python sql注入 过滤字符串的非法字符实例
2020/04/03 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
北京振戎融通Java面试题
2015/09/03 面试题
保洁公司服务承诺书
2014/05/28 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
大班上学期个人总结
2015/02/13 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫