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 相关文章推荐
WML,Apache,和 PHP 的介绍
Oct 09 PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
关于crontab的使用详解
Jun 24 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
Sep 22 PHP
推荐5款跨平台的PHP编辑器
Dec 25 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 PHP
twig模板常用语句实例小结
Feb 04 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
js实现图片360度旋转
2017/01/22 Javascript
深入理解ES7的async/await的用法
2017/09/09 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
python 产生token及token验证的方法
2018/12/26 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python如何编写win程序
2020/06/08 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
九年级家长会邀请函
2014/01/15 职场文书
高二历史教学反思
2014/01/25 职场文书
毕业实习评语
2014/02/10 职场文书
超市中秋节活动方案
2014/02/12 职场文书
诚信贷款承诺书
2014/05/30 职场文书
常务副总经理任命书
2014/06/05 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
2015国庆节感想
2015/08/04 职场文书