月牙丫里 发表于 2018-3-23 15:36:03

新手!按照小甲鱼老师运行了查询天气的代码,出错了,请问大佬们哪里有错?

本帖最后由 月牙丫里 于 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:14

上代码

月牙丫里 发表于 2018-3-23 15:39:08

ba21 发表于 2018-3-23 15:37
上代码

全在图片里,可以看得清楚吗?谢谢。

sd小舅子 发表于 2018-3-23 15:42:21

pickle文件是空的?

月牙丫里 发表于 2018-3-23 15:46:22

sd小舅子 发表于 2018-3-23 15:42
pickle文件是空的?

不是空的,图片的右上角可以看到,创建pickle_data时,里面有北京、上海和广州,三个城市。谢谢

ba21 发表于 2018-3-23 16:02:13

sd小舅子 发表于 2018-3-23 17:01:51

月牙丫里 发表于 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:49:40

本帖最后由 月牙丫里 于 2018-3-23 17:51 编辑

sd小舅子 发表于 2018-3-23 17:01
是我傻了……
pickle空的话在上面就报错了……
报错的位置在……


我输出name1和weatherHTML,name1正常,但weatherHTML为空,为什么?

月牙丫里 发表于 2018-3-23 17:59:01

ba21 发表于 2018-3-23 16:02


官网的网址有改动,我也对应的改了下,
但,我在输出name1和weatherHTML时,name1正确,weatherHTML为空,为什么呢?谢谢

梦幻诗雅莞妤 发表于 2018-3-23 17:59:34

我也试了一下,跟你的错误是一样的{:10_266:}

月牙丫里 发表于 2018-3-23 18:09:45

梦幻诗雅莞妤 发表于 2018-3-23 17:59
我也试了一下,跟你的错误是一样的

我输出了File1,如图,好像这个url就出错了

梦幻诗雅莞妤 发表于 2018-3-23 18:24:32

月牙丫里 发表于 2018-3-23 18:09
我输出了File1,如图,好像这个url就出错了

我也加了utf-8,不过是加在开头,但是错误还是一样的

2289001949 发表于 2018-3-23 19:23:12

你在这多久了上传代码都不会上传吗??拜托你去看一下怎么上传代码好不好
要人解答又不上传代码
用这个<>上传

月牙丫里 发表于 2018-3-23 19:50:06

本帖最后由 月牙丫里 于 2018-3-23 20:25 编辑

2289001949 发表于 2018-3-23 19:23
你在这多久了上传代码都不会上传吗??拜托你去看一下怎么上传代码好不好
要人解答又不上传代码
用这个 ...

不好意思,对不起,我是小白一名,刚到论坛几天不是很清楚求答发帖的格式和标准,我重新上传一下代码,谢谢提醒。

月牙丫里 发表于 2018-3-23 19:52:41

本帖最后由 月牙丫里 于 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:04:07

本帖最后由 2289001949 于 2018-3-23 20:06 编辑

月牙丫里 发表于 2018-3-23 19:52
重新上传一下代码,迫切需要大佬们的解惑,谢谢。
<
import urllib.request


不是。。。。。。是输入框有<>这个符号


点一下那个再把代码复制进去
然后再提交
就可以了
你把发的主题重新编辑一下就行

月牙丫里 发表于 2018-3-23 20:28:13

2289001949 发表于 2018-3-23 20:04
不是。。。。。。是输入框有这个符号




好的,谢谢提醒

mintaka 发表于 2018-3-23 23:12:03

应该是反爬了,用模拟浏览器才爬到网页。。。{:10_269:}

月牙丫里 发表于 2018-3-24 12:23:08

mintaka 发表于 2018-3-23 23:12
应该是反爬了,用模拟浏览器才爬到网页。。。

应该不是,试了一下CSDN一位博主的方法,可以正常爬取中国天气网信息,不过他是用BeautifulSoup解析网页的,这里是用Json解析·的,我的python版本是3.6,会不会是我的版本问题?求解惑。

sd小舅子 发表于 2018-3-24 12:27:27

本帖最后由 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
查看完整版本: 新手!按照小甲鱼老师运行了查询天气的代码,出错了,请问大佬们哪里有错?