python解析中国天气网的天气数据


Posted in Python onMarch 21, 2014

使用方法:terminal中输入

python weather.py http://www.weather.com.cn/weather/101010100.shtml

北京6天的天气数据 json格式

#coding=utf-8  
#weather.py  
import urllib  
import re  
import simplejson  
import sys  if len(sys.argv) != 2:  
    print 'please enter: python ' + sys.argv[0] + '  <url>'  
    exit(0)   
url = sys.argv[1];  
def readurlPageContent(url):#获取页面的所有数据 逐行读取  
    webpage = urllib.urlopen(url);  
    line = webpage.readline();  
    data = ''  
    while line:  
        data = data + line.strip(); #去除每行两边的的空格  
        line = webpage.readline();   
    return data  
def getDatabody(data):  
    reg = re.compile(r'(<div class=\"weatherYubaoBox\">(?:(?!<div)(?!</div).)*</div>)');  
    matchs = reg.findall(data,re.I);  
    if len(matchs) > 0:  
        return matchs[0]  
    return None  
def getSixDayWeather(data):  
    regs = re.compile(r'>((?:(?!<)(?!>)(?!var).)+)<');  
    datas = regs.findall(data)  
    if len(datas) > 12:  
        datas = datas[12:len(datas)-7];#提取其中的78项 即后面6天的天气数据 每天相关的信息有13个  
        return datas      
    return None  
  
data = readurlPageContent(url);  
match_data = getDatabody(data)  
if match_data == None :  
    print 'get weather data fail'  
    exit(0)  
weathers_data = getSixDayWeather(match_data)  
if weathers_data == None:  
    print 'get six day info fail'  
    exit(0)  
count = len(weathers_data);  
groups_item_count = count / 6;  
weathers = {};  
groups = [];  
start = 0  
for item in weathers_data :  
    if (start % groups_item_count) == 0:  
        groups = [];  
        weathers[('day'+str(start/groups_item_count + 1))] = groups;  
    groups.append(item)  
    start = start + 1  
  
print simplejson.dumps(weathers, encoding='UTF-8', ensure_ascii=False) 

注:本文中使用了第三方JSON库simplejson,安装方法参考下面:
1.下载:http://pypi.python.org/pypi/simplejson/ ,文件为压缩文件
2.解压:可以直接右键:解压文件.例如:D:/simplejson
3.开始---运行---输入命令:cmd
4.进入到目录(如:D:/simplejson)

    cd D:/simplejson

5.运行安装文件:setup.py install
Python 相关文章推荐
零基础写python爬虫之抓取糗事百科代码分享
Nov 06 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
Apr 06 Python
python实现键盘控制鼠标移动
Nov 27 Python
朴素贝叶斯Python实例及解析
Nov 19 Python
Python Pandas 如何shuffle(打乱)数据
Jul 30 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
python标识符命名规范原理解析
Jan 10 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
Sep 04 Python
python实现文件名批量替换和内容替换
Mar 20 #Python
Python读写Redis数据库操作示例
Mar 18 #Python
python实现k均值算法示例(k均值聚类算法)
Mar 16 #Python
python实现保存网页到本地示例
Mar 16 #Python
利用打码兔和超人打码自封装的打码类分享
Mar 16 #Python
Python使用代理抓取网站图片(多线程)
Mar 14 #Python
python3.3使用tkinter开发猜数字游戏示例
Mar 14 #Python
You might like
PHP的FTP学习(二)[转自奥索]
2006/10/09 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
javaScript实现一个队列的方法
2020/07/14 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
python smtplib发送带附件邮件小程序
2018/05/22 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
毕业生文员求职信
2013/11/03 职场文书
程序员岗位职责
2013/11/11 职场文书
护士在校生自荐信
2014/02/01 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
党员创先争优承诺书
2014/03/26 职场文书
导师推荐信范文
2014/05/09 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
通知格式
2015/04/27 职场文书
2016年少先队活动总结
2016/04/06 职场文书
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android