php file_get_contents函数轻松采集html数据


Posted in PHP onApril 22, 2010
<?php 
//全国,判断条件是$REQUEST_URI是否含有html 
if (!strpos($_SERVER["REQUEST_URI"],".html")) 
{ 
$page="http://qq.ip138.com/weather/"; 
$html = file_get_contents($page,'r'); 
$pattern="/<B>全国主要城市、县当天和未来五天天气趋势预报在线查询<\/B>(.*?)<center style=\"padding\:3px\">/si"; 
//正则匹配之间的html 
preg_match($pattern,$html,$pg); 
echo ""; 
//正则替换远程地址为本地地址 
$p=preg_replace('/\/weather\/(\w+)\/index.htm/', 'tq.php/$1.html', $pg[1]); 
echo $p; 
} 
//省,判断条件是$REQUEST_URI是否含有? 
else if(!strpos($_SERVER["REQUEST_URI"],"?")){ 
//yoyo推荐的使用分割获得数据,这里是获得省份名称 
$province=explode("/",$_SERVER["REQUEST_URI"]); 
$province=explode(".",$province[count($province)-1]); 
$province=$province[0]; 
//被注释掉的是我自己写出来的正则,感觉写的不好,但效果等同上面 
//preg_match('/[^\/]+[\.(html)]$/',$_SERVER["REQUEST_URI"],$pro); 
//$province=preg_replace('/\.html/','',$pro[0]); 
$page="http://qq.ip138.com/weather/".$province."/index.htm"; 
//获取html数据之前先尝试打开页面,防止恶意输入地址导致出错 
if (!@fopen($page, "r")) { 
die("对不起,该地址不存在!<a href=javascript:history.back(1)>点击这里返回</a>"); 
exit(0); 
} 
$html = file_get_contents($page,'r'); 
$pattern="/五天天气趋势预报<\/B>(.*?)请输入输入市/si"; 
preg_match($pattern,$html,$pg); 
echo ""; 
//正则替换,获取省份,城市 
$p=preg_replace('/\/weather\/(\w+)\/(\w+).htm/', '$2.html?pro=$1', $pg[1]); 
echo $p; 
} 
else { 
//市,通过get传递省份 
$pro=$_REQUEST['pro']; 
$city=explode("/",$_SERVER["REQUEST_URI"]); 
$city=explode(".",$city[count($city)-1]); 
$city=$city[0]; 
//preg_match('/[^\/]+[\.(html)]+[\?]/',$_SERVER["REQUEST_URI"],$cit); 
//$city=preg_replace('/\.html\?/','',$cit[0]); 
$page="http://qq.ip138.com/weather/".$pro."/".$city.".htm"; 
if (!@fopen($page, "r")) { 
die("对不起,该地址不存在!<a href=javascript:history.back(1)>点击这里返回</a>"); 
exit(0); 
} 
$html = file_get_contents($page,'r'); 
$pattern="/五天天气趋势预报<\/B>(.*?)请输入输入市/si"; 
preg_match($pattern,$html,$pg); 
echo ""; 
//获取真实的图片地址 
$p=preg_replace('/\/image\//', 'http://qq.ip138.com/image/', $pg[1]); 
echo $p; 
} 
?>
PHP 相关文章推荐
php中防止恶意刷新页面的代码小结
Oct 31 PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
zend framework框架中url大小写问题解决方法
Aug 19 PHP
phalcon框架使用指南
Feb 23 PHP
CodeIgniter集成smarty的方法详解
May 26 PHP
php中array_slice和array_splice函数解析
Oct 18 PHP
php实现文章置顶功能的方法
Oct 20 PHP
PHP中include()与require()的区别说明
Feb 14 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 PHP
laravel请求参数校验方法
Oct 10 PHP
国外比较好的几个的Php开源建站平台小结
Apr 22 #PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 #PHP
php allow_url_include的应用和解释
Apr 22 #PHP
php strcmp使用说明
Apr 22 #PHP
PHP 加密解密内部算法
Apr 22 #PHP
PHP 根据IP地址控制访问的代码
Apr 22 #PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 #PHP
You might like
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
带你快速理解javascript中的事件模型
2017/08/14 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
vuex与组件联合使用的方法
2018/05/10 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
Python计算回文数的方法
2015/03/11 Python
十个Python程序员易犯的错误
2015/12/15 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
python实现tail -f 功能
2020/01/17 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
波兰补充商店:Muscle Power
2018/10/29 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
敏捷开发的主要原则都有哪些
2015/04/26 面试题
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
农村党员一句话承诺
2014/05/30 职场文书
小学学校评估方案
2014/06/08 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
Redis唯一ID生成器的实现
2022/07/07 Redis