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也可以?成Shell Script
Oct 09 PHP
利用PHP制作简单的内容采集器的原理分析
Oct 01 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
学习php开源项目的源码指南
Dec 21 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
Mar 16 PHP
typecho插件编写教程(三):保存配置
May 28 PHP
如何解决PHP无法实现多线程的问题
Sep 25 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 PHP
使用laravel指定日志文件记录任意日志
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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
JS Array对象入门分析
2008/10/30 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
Python中内置的日志模块logging用法详解
2016/07/12 Python
python计算两个地址之间的距离方法
2018/06/09 Python
Python线程同步的实现代码
2018/10/03 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
python新手学习可变和不可变对象
2020/06/11 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
为什么要使用servlet
2016/01/17 面试题
法学毕业生自荐信
2013/11/13 职场文书
入股协议书范本
2014/04/14 职场文书
项目合作协议书范本
2014/04/16 职场文书
外出听课学习心得体会
2016/01/15 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
python利用while求100内的整数和方式
2021/11/07 Python
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript