>

python深入分析中华夏族民共和国天气网的天气数

- 编辑:www.bifa688.com -

python深入分析中华夏族民共和国天气网的天气数

缓和方式正是扩充二个参数

以前一直选取中夏族民共和国气候网的天气预报组件都相当好,然则自打她们进级组件后数据加载变得不行不稳定,因为JS的鸿沟平日导致网址展开速度相当的慢。为了消除这么些主题素材调控现学现用python编写多少个抓取程序,每日定时抓取最新的天气情况并生成静态JS供网址调用。由于初学python,程序有个别地点写得不是很优雅,还望高手指正。

应用格局:terminal中输入

看下代码比较

代码如下:

复制代码 代码如下:

[python]
#coding:utf8  
#python2.7 winxp  
import urllib 
import sys  
import json 
 
#url = r''  
url = r'' 
res = urllib.urlopen(url)  #回到的是个json串  
jinfo = res.read().decode('utf8') 
info = json.dumps(jinfo, ensure_ascii=False)  #安装为非ascii分析  
info1 = json.dumps(jinfo) 
print info  #相对而言下结果   
print info1 
weatherinfo = {} 

#!/usr/bin/env python
#coding:UTF-8

python weather.py

#coding:utf8
#python2.7 winxp
import urllib
import sys
import json

import urllib,os,datetime

首都6天的气候数据 json格式

#url = r''
url = r''
res = urllib.urlopen(url)  #回来的是个json串
jinfo = res.read().decode('utf8')
info = json.dumps(jinfo, ensure_ascii=False)  #设置为非ascii分析
info1 = json.dumps(jinfo)
print info  #相比较之下下结果
print info1
weatherinfo = {}"{"weatherinfo":{"city":"淮北","cityid":"101221201","temp1":"24℃","temp2":"10℃","weather":"晴","img1":"d0.gif","img2":"n0.gif","ptime":"11:00"}}"
"{"weatherinfo":{"city":"u6deeu5317","cityid":"101221201","temp1":"24u2103","temp2":"10u2103","weather":"u6674","img1":"d0.gif","img2":"n0.gif","ptime":"11:00"}}"

def GetWeather(cityid):
  "获取内定都市的天气情形"
  #
  #{"weatherinfo":{"city":"延 长","cityid":"101110301","temp1":"31℃","temp2":"18℃","weather":"多 云","img1":"d1.gif","img2":"n1.gif","ptime":"08:00"}}
  url=""
  Result=""
  try:
    web=urllib.urlopen(url)
    content=web.read().decode('utf-8').replace('"',"")
  except Exception,e:
    Result="error"
  if content.find("{weatherinfo") >=0:
    Items=content.replace("{weatherinfo:{","").replace("}}","").split(",")
    if len(Items)>=8:
      Result="<span class='weather'>" Items[0].split(":")[1] " " Items[4].split(":")[1] " " Items[2].split(":")[1] " / " Items[3].split(":")[1] " </span><img src='weather/" Items[5].split(":")[1] "'>" " <img src='weather/" Items[6].split(":")[1] "'>"
  return Result

复制代码 代码如下:

 

def CreateJS(FileName,Content):
  if len(Content)>10:
    now=datetime.datetime.now()
    try:
      fp=open(FileName,'w')
      fp.write('document.write("' Content.encode("utf-8") '");n')
      fp.write('//' now.strftime('%Y-%m-%d %H:%M:%S') 'n')
      fp.close()
    except IOError:
      print "ioerror"

#coding=utf-8 
#weather.py 
import urllib 
import re 
import simplejson 
import sys 

看下代码比较 [python]必发88手机版, #coding:utf8 #python2.7 winxp import urllib import sys import json #url = r...

if __name__ == "__main__":
  Wcont=GetWeather("101110301")
  #print Wcont
  CreateJS("/weather.js",Wcont)

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天的天气数据 每一日相关的新闻有10个 

1、城市代码能够到中华气象互连网去查。

        return datas     
    return None 

2、气候Logo也得以在华三夏气网的Logo示例里去猎取,这里就不提供了。

 
data = readurlPageContent(url); 
match_data = getDatabody(data) 
if match_data == None : 
    print 'get weather data fail' 
    exit(0) 

3、有同学表示,天气网的插件不是支撑延后加载吗?嗯,是这么的。经自身实地衡量在有个别手提式有线电电话机浏览器上会导致整个页面变空白,难点已交由给合法。

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.下载: ,文件为压缩文件
2.解压:能够直接右键:解压文件.比如:D:/simplejson
3.开首---运转---输入指令:cmd
4.进来到目录(如:D:/simplejson)

复制代码 代码如下:

    cd D:/simplejson

5.运维安装文件:setup.py install

复制代码 代码如下: python weather.py 新加坡6天的气象数据 json格式 复制代码 代码...

本文由必发88手机版发布,转载请注明来源:python深入分析中华夏族民共和国天气网的天气数