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语法(5)
Oct 09 PHP
php4的彩蛋
Oct 09 PHP
php 无限极分类
Mar 27 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
php模拟post提交数据的方法
Feb 12 PHP
PHP多文件上传实例
Jul 09 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
Jan 05 PHP
Laravel框架实现发送短信验证功能代码
Jun 06 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
Jun 13 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
laravel admin实现分类树/模型树的示例代码
Jun 10 PHP
详解Go与PHP的语法对比
May 29 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP 变量的定义方法
2010/01/26 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
Python实现配置文件备份的方法
2015/07/30 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
用python生成1000个txt文件的方法
2018/10/25 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
python编写计算器功能
2019/10/25 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
django实现后台显示媒体文件
2020/04/07 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
会计系中文个人求职信
2013/12/24 职场文书
内衣营销方案
2014/03/15 职场文书
高中学生期末评语
2014/04/25 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
爱晚亭导游词
2015/02/09 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
会计稽核岗位职责
2015/04/13 职场文书
办公室规章制度范本
2015/08/04 职场文书
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js