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安装攻略:常见问题解答(一)
Oct 09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 PHP
推荐个功能齐全的发送PHP邮件类
Jan 03 PHP
PHP strtr() 函数使用说明
Nov 21 PHP
php统计文章排行示例
Mar 04 PHP
PHP判断远程图片是否存在的几种方法
May 04 PHP
PHP四种基本排序算法示例
Apr 09 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP+Ajax实现的检测用户名功能简单示例
Feb 12 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
IStream与TStream之间的相互转换
2008/08/01 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
php中JSON的使用与转换
2015/01/14 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
初识ThinkPHP控制器
2016/04/07 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
js+css实现打字效果
2020/06/24 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
jQuery选择器之基本过滤选择器用法实例分析
2019/02/19 jQuery
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
python中树与树的表示知识点总结
2019/09/14 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
python 制作磁力搜索工具
2021/03/04 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
党员年终民主评议的自我评价
2013/11/05 职场文书
给海归自荐信的建议
2013/12/13 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
golang 实现Location跳转方式
2021/05/02 Golang
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers