设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第46课】 查天气(4)

  [复制链接]

2

主题

0

好友

42

积分

新手上路

Rank: 1

141#
发表于 2017-9-14 08:57:42 |只看该作者
不知道是不是台网的xml定义的有些问题,松江河罗子沟应该是不同的地方才对
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

142#
发表于 2017-9-14 11:26:07 |只看该作者
oak 发表于 2017-9-14 08:57
不知道是不是台网的xml定义的有些问题,松江河罗子沟应该是不同的地方才对 ...

数据里面的确有一些类似笔误的错误,大多不是大城市
简单的处理办法就是加异常处理,忽略这些

本身因为这个接口也过时了,已经不更新数据了,所以实际数据也没有使用价值。
新的接口看第一篇帖子开头
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

42

积分

新手上路

Rank: 1

143#
发表于 2017-9-14 14:09:40 |只看该作者
crossin先生 发表于 2017-9-14 11:26
数据里面的确有一些类似笔误的错误,大多不是大城市
简单的处理办法就是加异常处理,忽略这些

好的,我换新的试试,多谢楼主!
回复

使用道具 举报

2

主题

0

好友

42

积分

新手上路

Rank: 1

144#
发表于 2017-9-14 14:37:11 |只看该作者
crossin先生 发表于 2017-9-14 11:26
数据里面的确有一些类似笔误的错误,大多不是大城市
简单的处理办法就是加异常处理,忽略这些

楼主,我用新网址进行了替换,不过查到后面就突然跳出奇奇怪怪的东西了

# url = 'http://m.weather.com.cn/data3/city%s.xml'
# urlp = 'http://m.weather.com.cn/data3/city.xml'

url = 'http://www.weather.com.cn/data/list3/city%s.xml?level=3'
urlp = 'http://www.weather.com.cn/data/list3/city.xml?level=1'

300501|101300501
桂林:101300501

<!DOCTYPE HTML>
<html>
<head>
<link rel="dns-prefetch" href="http://i.tq121.com.cn">
<meta charset="utf-8" />
<title>非常抱歉,网页无法访问</title>
<meta  name="keywords" content="天气预报,天气,天气预报查询一周,天气预报15天查询,天气预报查询,北京天气,天气在线,气候,气象" />
<meta name="description" content="中国天气网官方权威发布天气预报,逐三小时天气预报,提供天气预报查询一周,天气预报15天查询,空气质量,生活指数,旅游出行,交通天气等查询服务" />
<meta name="msapplication-task" content="name=天气资讯;action-uri=http://news.weather.com.cn/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<meta name="msapplication-task" content="name=生活天气;action-uri=http://www.weather.com.cn/life/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<meta name="msapplication-task" content="name=气象科普;action-uri=http://www.weather.com.cn/science/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<meta name="msapplication-task" content="name=灾害预警;action-uri=http://www.weather.com.cn/alarm/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<meta name="msapplication-task" content="name=旅游天气;action-uri=http://www.weather.com.cn/trip/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<script type="text/javascript">
    var t=4;//设定跳转的时间
    setInterval("refer()",1000); //启动1秒定时
    function refer(){  
        if(t==0){
            location="http://www.weather.com.cn/#404"; //#设定跳转的链接地址
        }
        document.getElementById('show').innerHTML=""+t+""; // 显示倒计时
        t--; // 计数器递减
        //本文转自:
    }
    </script>
<style>

【code】

# python 3.4.2
# L45 Get province code
# 20170908
# by oak
########################

import urllib.request

# url = 'http://m.weather.com.cn/data3/city%s.xml'
# urlp = 'http://m.weather.com.cn/data3/city.xml'

url = 'http://www.weather.com.cn/data/list3/city%s.xml?level=3'
urlp = 'http://www.weather.com.cn/data/list3/city.xml?level=1'

contentp = urllib.request.urlopen(urlp).read().decode('utf8') # 获取页面信息,python需要使用到decode
# print(contentp)

provinces = contentp.split(',')
print(provinces)
print()
for p in provinces:
    p_info = p.split('|')
    p_code = p_info[0]
    p_name = p_info[1]
    urlc = url % p_code # 拼接市级别的url
    contentc = urllib.request.urlopen(urlc).read().decode('utf8') # 获取每个省对应城市的信息
    print (contentc)
    cities = contentc.split(',')
    # print (cities)
    print()
    for c in cities:
        c_info = c.split('|')  # 将每个字符串变为数据,之后取第一个值,即为城市编码
        c_code = c_info[0]
        urld = url % c_code
        contentd = urllib.request.urlopen(urld).read().decode('utf8')
        print(contentd)
        districts = contentd.split(',')
        print()
        for d in districts:
            d_info = d.split('|')
            d_code = d_info[0]
            d_name = d_info[1]
            urla = url % d_code
            contenta = urllib.request.urlopen(urla).read().decode('utf8')
            print(contenta)
            code = contenta.split('|')[1]
            print(d_name + ':' + code)
            print()
   


回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

145#
发表于 2017-9-14 19:17:31 |只看该作者
oak 发表于 2017-9-14 14:37
楼主,我用新网址进行了替换,不过查到后面就突然跳出奇奇怪怪的东西了

# url = 'http://m.weather.com. ...

如果是偶尔几个,应该还是对方网站数据本身的问题。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

34

积分

新手上路

Rank: 1

146#
发表于 2017-12-21 21:50:25 |只看该作者
result = 'city = {\n'
            result += line
            print  name + ':' + code
result += '}'
这个地方的result不是很明白怎么回事,这是建立了一个字典吗,result貌似也没有初始化,直接就在里面可以result+=line这样用吗?
最后一行加上result += '}'这个又是怎么回事呢?
编程新人一枚,请各位大神指教
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

147#
发表于 2017-12-21 22:07:26 |只看该作者
Chris_py 发表于 2017-12-21 21:50
result = 'city = {\n'
            result += line
            print  name + ':' + c ...

这里result就是一个很长的字符串,开头内容'city = {\n',之后result = result +line,把line的内容添加进来,最后再加个'}'------------------------也就是'city={......}' 把一个字典赋给city的内容

这么写的原因是之后会把result 写入city.py文件中,这样city.py内容就是字符串内的city={..}这么个代码了
回复

使用道具 举报

0

主题

0

好友

34

积分

新手上路

Rank: 1

148#
发表于 2017-12-21 22:43:18 |只看该作者
f = open('city.py', 'w')
f.write(result)
f.close()
请问这一段不是应该把所抓取的代码保存到文件city.py中吗,并且是新建的一个文件,但是为什么我运行之后建成的是一个.pyc的文件呢,而且还打不开
请大神指点一下吧
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

149#
发表于 2017-12-22 14:18:42 |只看该作者
Chris_py 发表于 2017-12-21 22:43
f = open('city.py', 'w')
f.write(result)
f.close()

应该就是py,不知道是你找的位置不对,还是你命名冲突了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

34

积分

新手上路

Rank: 1

150#
发表于 2017-12-24 19:21:14 |只看该作者
crossin先生 发表于 2017-12-22 14:18
应该就是py,不知道是你找的位置不对,还是你命名冲突了

嗯嗯 我的文件里面有个相同名字的文件,我没注意 删了之后就生成.py了,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-20 21:02 , Processed in 0.028077 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部