Crossin的编程教室

标题: 查天气46课 [打印本页]

作者: florence    时间: 2016-10-5 06:51
标题: 查天气46课
跟着推送文的步骤,想要抓取城市代码。但是最后的问题是写不了文件。在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()


作者: crossin先生    时间: 2016-10-5 21:25
文件你自己先建好试试
后面那个报错,你把取到的值print出来看是什么来调试。应该是某些请求失败了
作者: mydream123    时间: 2016-10-15 23:45
对 我也是  老是提示越界了  迷或啊   
作者: crossin先生    时间: 2016-10-16 20:18
mydream123 发表于 2016-10-15 23:45
对 我也是  老是提示越界了  迷或啊

都是因为请求失败,看下抓到的是什么,对失败情况要额外做处理
作者: zljy913    时间: 2017-2-21 14:25
我的也一样,提示“code=content4.split('|')[1]IndexError: list index out of range”
异常处理后,抓取的是3个省的编码。跟for p in provinces[:3]一样
作者: crossin先生    时间: 2017-2-21 15:29
zljy913 发表于 2017-2-21 14:25
我的也一样,提示“code=content4.split('|')[1]IndexError: list index out of range”
异常处理后,抓取 ...

这里要做异常处理,有些数据有问题
作者: ghmanong    时间: 2017-2-25 17:35
抓取编号的时候两处地方有问题 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>
作者: crossin先生    时间: 2017-2-25 22:12
ghmanong 发表于 2017-2-25 17:35
抓取编号的时候两处地方有问题 060308|101060308的下一项和090208|101090208的下一项, 会显示如下异常,不 ...

好像是对方服务器数据的问题,中间有几个是错的
作者: crazy31423    时间: 2017-6-27 08:01
我遇到的也是这个问题




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5