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函数编程的一些特性
Apr 13 Python
python实现的守护进程(Daemon)用法实例
Jun 02 Python
Python3使用requests包抓取并保存网页源码的方法
Mar 15 Python
python简单实现刷新智联简历
Mar 30 Python
python paramiko模块学习分享
Aug 23 Python
Python3.6安装及引入Requests库的实现方法
Jan 24 Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
python实现的Iou与Giou代码
Jan 18 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
python 使用建议与技巧分享(四)
Aug 18 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 Error与Logging函数的深入理解
2013/06/03 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
php实现简单加入购物车功能
2017/03/07 PHP
JS 字符串连接[性能比较]
2009/05/10 Javascript
学习ExtJS Column布局
2009/10/08 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
python实现中文输出的两种方法
2015/05/09 Python
Python中tell()方法的使用详解
2015/05/24 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
Java的基础面试题附答案
2016/01/10 面试题
学生党员思想汇报
2013/12/28 职场文书
给女朋友的道歉信
2014/01/10 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
物理系毕业生自荐书范文
2014/02/22 职场文书
科学发展观演讲稿
2014/09/11 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
村党建工作汇报材料
2014/11/02 职场文书
家属答谢词
2015/01/05 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
Django显示可视化图表的实践
2021/05/10 Python
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android