请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生

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

  [复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-9-4 14:04:16 |显示全部楼层
Joyann 发表于 2013-9-4 11:53
想问一下,我们抓天气预报的网址是怎么来的呢??

从网上搜索出来的,有人在文章里写过。我试图从官网上找正式接口文档,没找到
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

38

积分

新手上路

Rank: 1

发表于 2013-9-4 20:22:48 |显示全部楼层
crossin先生 发表于 2013-9-4 14:04
从网上搜索出来的,有人在文章里写过。我试图从官网上找正式接口文档,没找到 ...

那大部分的网址是不是我们都可以搜得到呢?也就是说我们是不是可以利用这种类型的代码抓到更多网站的东西?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-9-5 19:49:26 |显示全部楼层
Joyann 发表于 2013-9-4 20:22
那大部分的网址是不是我们都可以搜得到呢?也就是说我们是不是可以利用这种类型的代码抓到更多网站的东西 ...

一般来说,不同网站的代码结构会有不少差异。所以,尽管原理上是想通的,但对于抓取不同的网站,还是要先去分析目标网站的代码,再对症下药。

会利用搜索引擎解决问题是个需要掌握的技能
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

发表于 2014-2-26 21:28:29 |显示全部楼层
crossin先生 发表于 2013-8-17 15:09
是windows对python的中文支持不好。
你可以改成

请指教:改完之后,虽然print输出不再是乱码,但写入的city.py中依然是乱码,怎么办?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2014-2-27 10:07:26 |显示全部楼层
learner 发表于 2014-2-26 21:28
请指教:改完之后,虽然print输出不再是乱码,但写入的city.py中依然是乱码,怎么办? ...

可能需要在写入文件的时候指定编码。
网上找了段代码供参考。windows的话可能要指定为cp936
  1. outFilePath = '.\\out\\out'
  2. outFile = open(outFilePath, 'w')
  3. s = u'我们'
  4. #指定写入文件时的编码
  5. outFile.write(s.encode('utf-8'))
复制代码
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

558

积分

高级会员

Rank: 4

发表于 2014-9-25 23:00:35 |显示全部楼层
先生,我有2个问题。
1,查询省(直辖市)的地址‘http://m.weather.com.cn/data5/city.xml’,和查询更低级别的市(地区)的地址‘http://m.weather.com.cn/data3/city%s.xml’中有data3,和data5,我发现通用啊,不知道怎么回事。
2,读取省得到的是“省编号|省名称,省编号|省名称,省编号|省名称...”,读取市,读取地区也都是这样,但是最后一次放入地区的编号“url4 = url % d_code,content4 = urllib2.urlopen(url4).read()”读出的是“地区编号|地区的查询时的编码(就是写入city.py中的)”.搞清这些才能更懂代码的某些行。
学习,纯粹。
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

发表于 2015-3-25 17:55:03 |显示全部楼层
看到这我怎么感觉大家好像基础都很好的样子、。、、、
回复

使用道具 举报

1

主题

0

好友

19

积分

新手上路

Rank: 1

发表于 2015-4-18 06:43:39 |显示全部楼层
前面的都看了非常好,阶梯设计的很好,循序渐进
这次的http://m.weather.com.cn/data5/city.xml连接失效请老师修复下
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-4-18 23:42:35 |显示全部楼层
lovepythoner 发表于 2015-4-18 06:43
前面的都看了非常好,阶梯设计的很好,循序渐进
这次的http://m.weather.com.cn/data5/city.xml连接失效请老 ...

新的访问接口可参考这两篇文章:
http://blog.csdn.net/hello_haozi/article/details/7564223
http://blog.csdn.net/fancylovejava/article/details/26102635
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

28

积分

新手上路

Rank: 1

发表于 2015-10-8 15:52:56 |显示全部楼层
  1. import urllib2
  2. import time
  3. url1 = 'http://m.weather.com.cn/data5/city.xml'
  4. content1 = urllib2.urlopen(url1).read()
  5. provinces = content1.split(',')
  6. result = 'city = {\n'
  7. url = 'http://m.weather.com.cn/data3/city%s.xml'
  8. for p in provinces:
  9.     p_code = p.split('|')[0]
  10.     url2 = url % p_code
  11.     time.sleep(0.5)
  12.     content2 = urllib2.urlopen(url2).read()
  13.     cities = content2.split(',')
  14.     for c in cities:
  15.         c_code = c.split('|')[0]
  16.         url3 = url % c_code
  17.         time.sleep(0.5)
  18.         content3 = urllib2.urlopen(url3).read()
  19.         districts = content3.split(',')
  20.         for d in districts:
  21.             d_pair = d.split('|')
  22.             d_code = d_pair[0]
  23.             name = d_pair[1]
  24.             url4 = url % d_code
  25.             time.sleep(0.5)
  26.             content4 = urllib2.urlopen(url4).read()
  27.             code = content4.split('|')[1]
  28.             line = "    '%s': '%s',\n" % (name, code)
  29.             result += line
  30.             print  name.decode('utf-8') + ':' + code
  31. result += '}'
  32. f = file('d:\city.py', 'w')
  33. f.write(result.encode('utf-8'))
  34. f.close()
  35. print '>>>>>>>>>>DONE!<<<<<<<<<<'
复制代码
基本就是按照教程上来的,加了几个暂停,输出一部分以后就报错了~
北京:101010100
海淀:101010200
朝阳:101010300
顺义:101010400
怀柔:101010500
通州:101010600
昌平:101010700
延庆:101010800
丰台:101010900
石景山:101011000
大兴:101011100
房山:101011200
密云:101011300
门头沟:101011400
平谷:101011500
八达岭:101011600
佛爷顶:101011700
汤河口:101011800
密云上甸子:101011900
斋堂:101012000
霞云岭:101012100
上海:101020100
闵行:101020200
宝山:101020300
嘉定:101020400
南汇:101020500
金山:101020600
青浦:101020800
松江:101020800
奉贤:101020900
崇明:101021000
天津:101030100
武清:101030200
宝坻:101030300
东丽:101030400
西青:101030500
北辰:101030600
宁河:101030700
汉沽:101030800
静海:101030900
津南:101031000
塘沽:101031100
大港:101031200
蓟县:101031300
重庆:101040100
永川:101040200
合川:101040300
南川:101040400
江津:101040500
万盛:101040600
渝北:101040700
北碚:101040800
巴南:101040900
长寿:101041000
黔江:101041100
万州天城:101041200
万州龙宝:101041300
涪陵:101041400

Traceback (most recent call last):
  File "D:/BaiduYunDownload/Python/练习文档/catch.py", line 27, in <module>
    code = content4.split('|')[1]
IndexError: list index out of range
回复

使用道具 举报

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

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

GMT+8, 2024-5-22 13:38 , Processed in 0.021100 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部