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 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
linux php mysql数据库备份实现代码
Mar 10 PHP
PHP 文件类型判断代码
Mar 13 PHP
第七章 php自定义函数实现代码
Dec 30 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
php pthreads多线程的安装与使用
Jan 19 PHP
laravel学习教程之关联模型
Jul 30 PHP
你不知道的文件上传漏洞php代码分析
Sep 29 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 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:风雨欲来 路在何方?
2006/10/09 PHP
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
python基础教程之字典操作详解
2014/03/25 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
武侯祠导游词
2015/02/04 职场文书
肖申克救赎观后感
2015/06/02 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
家长会后的感想
2015/08/11 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
图文详解matlab原始处理图像几何变换
2021/07/09 Python
JavaScript实例 ODO List分析
2022/01/22 Javascript