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 相关文章推荐
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
dedecms中常见问题修改方法总结
Mar 21 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
解析php curl_setopt 函数的相关应用及介绍
Jun 17 PHP
php二分查找二种实现示例
Mar 12 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
CodeIgniter框架URL路由总结
Sep 03 PHP
PHP使用正则表达式获取微博中的话题和对象名
Jul 18 PHP
PHP生成随机密码方法汇总
Aug 27 PHP
php获取POST数据的三种方法实例详解
Dec 20 PHP
PDO::lastInsertId讲解
Jan 29 PHP
thinkphp5框架API token身份验证功能示例
May 21 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文件大小格式化函数合集
2014/03/10 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
js树形控件脚本代码
2008/07/24 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
js实现每日签到功能
2018/11/29 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
Python实现句子翻译功能
2017/11/14 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
python3实现逐字输出的方法
2019/01/23 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
Python秒算24点实现及原理详解
2019/07/29 Python
Python如何读写字节数据
2020/08/05 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
python Gabor滤波器讲解
2020/10/26 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
家庭户外服装:Hawkshead
2017/11/02 全球购物
校园活动策划书范文
2014/01/10 职场文书
元宵节主持词
2014/03/25 职场文书
买卖合同协议书范本
2014/10/18 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
师范生见习自我总结
2015/06/23 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
深入理解python多线程编程
2021/04/18 Python
Go Plugins插件的实现方式
2021/08/07 Golang
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android