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 和 MySQL 时区的一点总结
Mar 26 PHP
PHP 数组实例说明
Aug 18 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
实例讲解PHP面向对象之多态
Aug 20 PHP
PHP统计当前在线用户数实例讲解
Oct 21 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
项目中应用Redis+Php的场景
May 22 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
thinkphp5实现微信扫码支付
Dec 23 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
Syphon 使用方法
2021/03/03 冲泡冲煮
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
PHP线程的内存回收问题
2016/07/08 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python中实现对list做减法操作介绍
2015/01/09 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
PYTHON绘制雷达图代码实例
2019/10/15 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
python 调用Google翻译接口的方法
2020/12/09 Python
单位实习证明怎么写
2014/01/17 职场文书
中考冲刺决心书
2014/03/11 职场文书
体育活动总结范文
2014/05/04 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python