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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
如何设置mysql允许外网访问
Jun 04 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
Jun 17 PHP
php生成短网址示例
May 05 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
PHP面向对象程序设计实例分析
Jan 26 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
Jan 17 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
php 截取中英文混合字符串的方法
May 31 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
javascript日期计算实例分析
2015/06/29 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
JavaScript两个变量交换值的实现方法
2017/03/01 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
python自动安装pip
2014/04/24 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
解决python运行效率不高的问题
2020/07/20 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
我爱读书演讲稿
2014/05/07 职场文书
部门活动策划方案
2014/08/16 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
源码安装apache脚本部署过程详解
2022/09/23 Servers