新手!按照小甲鱼老师运行了查询天气的代码,出错了,请问大佬们哪里有错?
本帖最后由 月牙丫里 于 2018-3-23 15:41 编辑在线等,急急急急急~
这是代码
import urllib.request
import json
import pickle
pickle_file = open('city_data.pkl','rb')
city = pickle.load(pickle_file)
password = input('请输入城市:')
name1 = city
File1 = urllib.request.urlopen('http://www.weather.com.cn/data/' + name1 +'.htm1')
weatherHTML = File1.read().decode('utf-8')#读入打开的ur1
weatherJSON = json.JSONDecoder().decode(weatherHTML)#创建json
weatherInfo = weatherJSON["weatherinfo"]
#打印信息
print('城市:',weatherInfo['city'])
print('时间:',weatherInfo['date_y'])
print('24小时天气:')
print('温度:',weatherInfo['temp1'])
print('天气:',weatherInfo['weather1'])
print('风速:',weatherInfo['wind1'])
print('紫外线:',weatherInfo['index_uv'])
print('穿衣指数:',weatherInfo['index_d'])
print('48小时天气:')
print('温度:',weatherInfo['temp2'])
print('天气:',weatherInfo['weather2'])
print('风速:',weatherInfo['wind2'])
print('紫外线:',weatherInfo['index48_uv'])
print('穿衣指数:',weatherInfo['index48_d'])
print('72小时天气:')
print('温度:',weatherInfo['temp3'])
print('天气:',weatherInfo['weather3'])
print('风速:',weatherInfo['wind3'])
#print('紫外线:',weatherInfo['index72_uv'])
#print('穿衣指数:',weatherInfo['index72_d'])
input('按任意键退出')
上代码 ba21 发表于 2018-3-23 15:37
上代码
全在图片里,可以看得清楚吗?谢谢。
pickle文件是空的? sd小舅子 发表于 2018-3-23 15:42
pickle文件是空的?
不是空的,图片的右上角可以看到,创建pickle_data时,里面有北京、上海和广州,三个城市。谢谢 月牙丫里 发表于 2018-3-23 15:46
不是空的,图片的右上角可以看到,创建pickle_data时,里面有北京、上海和广州,三个城市。谢谢
是我傻了……{:10_257:}
pickle空的话在上面就报错了……{:10_277:}
报错的位置在weatherJSON = json.JSONDecoder().decode(weatherHTML)……{:10_334:}
所以……{:10_256:}
把weatherHTML这个变量的值打印出来看看……{:10_325:} 本帖最后由 月牙丫里 于 2018-3-23 17:51 编辑
sd小舅子 发表于 2018-3-23 17:01
是我傻了……
pickle空的话在上面就报错了……
报错的位置在……
我输出name1和weatherHTML,name1正常,但weatherHTML为空,为什么? ba21 发表于 2018-3-23 16:02
官网的网址有改动,我也对应的改了下,
但,我在输出name1和weatherHTML时,name1正确,weatherHTML为空,为什么呢?谢谢 我也试了一下,跟你的错误是一样的{:10_266:} 梦幻诗雅莞妤 发表于 2018-3-23 17:59
我也试了一下,跟你的错误是一样的
我输出了File1,如图,好像这个url就出错了 月牙丫里 发表于 2018-3-23 18:09
我输出了File1,如图,好像这个url就出错了
我也加了utf-8,不过是加在开头,但是错误还是一样的 你在这多久了上传代码都不会上传吗??拜托你去看一下怎么上传代码好不好
要人解答又不上传代码
用这个<>上传
本帖最后由 月牙丫里 于 2018-3-23 20:25 编辑
2289001949 发表于 2018-3-23 19:23
你在这多久了上传代码都不会上传吗??拜托你去看一下怎么上传代码好不好
要人解答又不上传代码
用这个 ...
不好意思,对不起,我是小白一名,刚到论坛几天不是很清楚求答发帖的格式和标准,我重新上传一下代码,谢谢提醒。 本帖最后由 月牙丫里 于 2018-3-24 13:24 编辑
重新上传一下代码,迫切需要大佬们的解惑,谢谢。
city = {
'北京'='101010100',
'广州'='101280101',
'上海'='101020100'
}
import pickle
pickle_file = open('city_data.pkl','wb')
pickle.dump(city,pickle_file)
pickle_file.close()
import urllib.request
import json
import pickle
pickle_file = open('city_data.pkl','rb')
city = pickle.load(pickle_file)
password = input('请输入城市:')
name1 = city
print(name1)
File1 = urllib.request.urlopen('http://www.weather.com.cn/weather1d/' + name1 +'.shtml#search')
print(File1)
weatherHTML = File1.read().decode('utf-8')#读入打开的ur1
print(weatherHTML)
weatherJSON = json.JSONDecoder().decode(weatherHTML)#创建json
weatherInfo = weatherJSON["weatherinfo"]
#打印信息
print('城市:',weatherInfo['city'])
print('时间:',weatherInfo['date_y'])
print('24小时天气:')
print('温度:',weatherInfo['temp1'])
print('天气:',weatherInfo['weather1'])
print('风速:',weatherInfo['wind1'])
print('紫外线:',weatherInfo['index_uv'])
print('穿衣指数:',weatherInfo['index_d'])
print('48小时天气:')
print('温度:',weatherInfo['temp2'])
print('天气:',weatherInfo['weather2'])
print('风速:',weatherInfo['wind2'])
print('紫外线:',weatherInfo['index48_uv'])
print('穿衣指数:',weatherInfo['index48_d'])
print('72小时天气:')
print('温度:',weatherInfo['temp3'])
print('天气:',weatherInfo['weather3'])
print('风速:',weatherInfo['wind3'])
#print('紫外线:',weatherInfo['index72_uv'])
#print('穿衣指数:',weatherInfo['index72_d'])
input('按任意键退出')
本帖最后由 2289001949 于 2018-3-23 20:06 编辑
月牙丫里 发表于 2018-3-23 19:52
重新上传一下代码,迫切需要大佬们的解惑,谢谢。
<
import urllib.request
不是。。。。。。是输入框有<>这个符号
点一下那个再把代码复制进去
然后再提交
就可以了
你把发的主题重新编辑一下就行
2289001949 发表于 2018-3-23 20:04
不是。。。。。。是输入框有这个符号
好的,谢谢提醒 应该是反爬了,用模拟浏览器才爬到网页。。。{:10_269:} mintaka 发表于 2018-3-23 23:12
应该是反爬了,用模拟浏览器才爬到网页。。。
应该不是,试了一下CSDN一位博主的方法,可以正常爬取中国天气网信息,不过他是用BeautifulSoup解析网页的,这里是用Json解析·的,我的python版本是3.6,会不会是我的版本问题?求解惑。 本帖最后由 sd小舅子 于 2018-3-24 12:28 编辑
月牙丫里 发表于 2018-3-23 17:49
我输出name1和weatherHTML,name1正常,但weatherHTML为空,为什么?
1.我刚手动敲了你代码里的网址,最后的是'shtml'吧,似乎你代码里写的是'shtm1'……
2.手动从中国天气主页点进去的话,url的最后有一个'#input',你这代码的url字符串拼不对吧……
3.如果还不行,可能是加了反爬了……在request里面加上add_header()试试……
页:
[1]
2