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生成随机数或者字符串的代码
Sep 05 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 PHP
ThinkPHP框架实现session跨域问题的解决方法
Jul 01 PHP
初识php MVC
Sep 10 PHP
php中in_array函数用法探究
Nov 25 PHP
迁移PHP版本到PHP7
Feb 06 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
php cookie工作原理与实例详解
Jul 18 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
php json转换相关知识(小结)
Dec 21 PHP
Laravel使用Queue队列的技巧汇总
Sep 02 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
php4的彩蛋
2006/10/09 PHP
检测png图片是否完整的php代码
2010/09/06 PHP
php页面防重复提交方法总结
2013/11/25 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
索趣科技的答案
2007/02/07 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
js转html实体的方法
2016/09/27 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
Python实现ssh批量登录并执行命令
2016/10/25 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
Python工程师面试必备25条知识点
2018/01/17 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
天鹅的故事教学反思
2014/02/04 职场文书
大学应届生的自我评价
2014/03/06 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
Python如何导出导入所有依赖包详解
2021/06/08 Python
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang