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

Crossin的编程教室

 找回密码
 立即加入
查看: 5420|回复: 8

查天气46课

[复制链接]

3

主题

0

好友

15

积分

新手上路

Rank: 1

发表于 2016-10-5 06:51:54 |显示全部楼层
跟着推送文的步骤,想要抓取城市代码。但是最后的问题是写不了文件。在shell可以打印出来每个城市的代码,但是在我指定的f=open()的地址却没有找到文件。然后有时候运行代码会出现“code=content4.split('|')[1]IndexError: list index out of range”的error
不知道有没有人知道是什么问题
代码如下:
import urllib.request

url1 = 'http://m.weather.com.cn/data5/city.xml'
content1 = urllib.request.urlopen(url1).read()
content1=content1.decode()
provinces = content1.split(',')
result = 'city = {\n'
url = 'http://m.weather.com.cn/data3/city%s.xml'
for p in provinces:
    p_code= p.split('|')[0]
    url2 = url %p_code
    content2 =urllib.request.urlopen(url2).read().decode()
    cities = content2.split(',')
    for c in cities:
        c_code = c.split('|')[0]
        url3 = url %c_code
        content3=urllib.request.urlopen(url3).read().decode()
        districts=content3.split(',')
        for d in districts:
            d_pair=d.split('|')
            d_code=d_pair[0]
            name=d_pair[1]
            url4=url %d_code
            content4=urllib.request.urlopen(url4).read().decode()
            code=content4.split('|')[1]
            line="  '%s':'%s',\n" %(name,code)
            result+=line
result += '}'
f = open('d:/mycity.py', 'w')
f.write(result)
f.close()

回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2016-10-5 21:25:10 |显示全部楼层
文件你自己先建好试试
后面那个报错,你把取到的值print出来看是什么来调试。应该是某些请求失败了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

27

积分

新手上路

Rank: 1

发表于 2016-10-15 23:45:40 |显示全部楼层
对 我也是  老是提示越界了  迷或啊   
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2016-10-16 20:18:50 |显示全部楼层
mydream123 发表于 2016-10-15 23:45
对 我也是  老是提示越界了  迷或啊

都是因为请求失败,看下抓到的是什么,对失败情况要额外做处理
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

发表于 2017-2-21 14:25:58 |显示全部楼层
我的也一样,提示“code=content4.split('|')[1]IndexError: list index out of range”
异常处理后,抓取的是3个省的编码。跟for p in provinces[:3]一样
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-2-21 15:29:40 |显示全部楼层
zljy913 发表于 2017-2-21 14:25
我的也一样,提示“code=content4.split('|')[1]IndexError: list index out of range”
异常处理后,抓取 ...

这里要做异常处理,有些数据有问题
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

发表于 2017-2-25 17:35:05 |显示全部楼层
抓取编号的时候两处地方有问题 060308|101060308的下一项和090208|101090208的下一项, 会显示如下异常,不过完全看不懂,加一个try except 就可以了。

<html>
<head>
</head>
<body>
<script type="text/javascript">
        window.onload = function() {
        window.open("/","_self");
        };
        </script>
<!-- START WRating v1.0 -->
<script type="text/javascript" src="http://c.wrating.com/a1.js">
</script>
<script type="text/javascript">
var vjAcc="860010-2151010100";
var wrUrl="http://c.wrating.com/";
vjTrack("");
</script>
<noscript><img src="http://c.wrating.com/a.gif?a=&c=860010-2151010100" width="1" height="1"/></noscript>
<!-- END WRating v1.0 -->
</body>
</html>
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-2-25 22:12:41 |显示全部楼层
ghmanong 发表于 2017-2-25 17:35
抓取编号的时候两处地方有问题 060308|101060308的下一项和090208|101090208的下一项, 会显示如下异常,不 ...

好像是对方服务器数据的问题,中间有几个是错的
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

58

积分

注册会员

Rank: 2

发表于 2017-6-27 08:01:01 |显示全部楼层
我遇到的也是这个问题
回复

使用道具 举报

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

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

GMT+8, 2024-3-29 21:24 , Processed in 0.025776 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部