鱼C论坛

 找回密码
 立即注册
查看: 3690|回复: 27

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

[复制链接]
发表于 2018-3-23 15:36:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 月牙丫里 于 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[password]
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('按任意键退出')
最佳答案
2018-3-24 14:44:52
月牙丫里 发表于 2018-3-24 13:37
1.‘shtm1’确实是写错了。我把它改过来了
2.我也试了一下手动输入,url后面应该加后缀,不过我的浏览器 ...

既然网页文件能抓出来,那么就是解析网页文件时候的问题了……
json库我没用过……
这个库是只能转换标准的json样式的字符串,还是能自动抓取html文件里符合规则的字符串呢?……
如果是后者还好说……
如果是前面那种,不经过处理的html文件在传给json的时候就识别不出来了……
突然想到,网页地址都变了……
视频看太久忘记是不是这样了……
有没有可能是小甲鱼在演示的时候,调用的是中国天气网的api,直接返回的json格式的数据……
而现在我们抓的,是网页版的html数据……
于是去中国天气网找了下……
人家的api现在是收费的产品嘞……
所以……如果从现在我们用的网页上,只能用beautifulsoup或者re来爬……
如果要用直接返回json格式的api接口,就需要购买一下他们的api服务先……
或者有其他小伙伴订阅的,账号接口借来用用……

请问哪里错?

请问哪里错?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-23 15:37:14 | 显示全部楼层
上代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 15:39:08 | 显示全部楼层

全在图片里,可以看得清楚吗?谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 15:42:21 | 显示全部楼层
pickle文件是空的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 15:46:22 | 显示全部楼层
sd小舅子 发表于 2018-3-23 15:42
pickle文件是空的?

不是空的,图片的右上角可以看到,创建pickle_data时,里面有北京、上海和广州,三个城市。谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 16:02:13 | 显示全部楼层
2018-03-23_160148.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 17:01:51 | 显示全部楼层
月牙丫里 发表于 2018-3-23 15:46
不是空的,图片的右上角可以看到,创建pickle_data时,里面有北京、上海和广州,三个城市。谢谢

是我傻了……
pickle空的话在上面就报错了……
报错的位置在
  1. weatherJSON = json.JSONDecoder().decode(weatherHTML)
复制代码
……
所以……
把weatherHTML这个变量的值打印出来看看……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 17:49:40 | 显示全部楼层
本帖最后由 月牙丫里 于 2018-3-23 17:51 编辑
sd小舅子 发表于 2018-3-23 17:01
是我傻了……
pickle空的话在上面就报错了……
报错的位置在……


我输出name1和weatherHTML,name1正常,但weatherHTML为空,为什么?
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 17:59:01 | 显示全部楼层

官网的网址有改动,我也对应的改了下,
但,我在输出name1和weatherHTML时,name1正确,weatherHTML为空,为什么呢?谢谢
4.png
3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 17:59:34 | 显示全部楼层
我也试了一下,跟你的错误是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 18:09:45 | 显示全部楼层
梦幻诗雅莞妤 发表于 2018-3-23 17:59
我也试了一下,跟你的错误是一样的

我输出了File1,如图,好像这个url就出错了
5.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 18:24:32 | 显示全部楼层
月牙丫里 发表于 2018-3-23 18:09
我输出了File1,如图,好像这个url就出错了

我也加了utf-8,不过是加在开头,但是错误还是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 19:23:12 | 显示全部楼层
你在这多久了  上传代码都不会上传吗??拜托你去看一下怎么上传代码好不好
要人解答又不上传代码
用这个<>上传
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 19:50:06 | 显示全部楼层
本帖最后由 月牙丫里 于 2018-3-23 20:25 编辑
2289001949 发表于 2018-3-23 19:23
你在这多久了  上传代码都不会上传吗??拜托你去看一下怎么上传代码好不好
要人解答又不上传代码
用这个 ...


不好意思,对不起,我是小白一名,刚到论坛几天不是很清楚求答发帖的格式和标准,我重新上传一下代码,谢谢提醒。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 19:52:41 | 显示全部楼层
本帖最后由 月牙丫里 于 2018-3-24 13:24 编辑

重新上传一下代码,迫切需要大佬们的解惑,谢谢。


  1. city = {
  2. '北京'='101010100',
  3. '广州'='101280101',
  4. '上海'='101020100'
  5. }
  6. import pickle
  7. pickle_file = open('city_data.pkl','wb')
  8. pickle.dump(city,pickle_file)
  9. pickle_file.close()




  10. import urllib.request
  11. import json
  12. import pickle

  13. pickle_file = open('city_data.pkl','rb')
  14. city = pickle.load(pickle_file)


  15. password = input('请输入城市:')
  16. name1 = city[password]

  17. print(name1)

  18. File1 = urllib.request.urlopen('http://www.weather.com.cn/weather1d/' + name1 +'.shtml#search')

  19. print(File1)

  20. weatherHTML = File1.read().decode('utf-8')#读入打开的ur1

  21. print(weatherHTML)

  22. weatherJSON = json.JSONDecoder().decode(weatherHTML)#创建json

  23. weatherInfo = weatherJSON["weatherinfo"]
  24. #打印信息
  25. print('城市:',weatherInfo['city'])
  26. print('时间:',weatherInfo['date_y'])
  27. print('24小时天气:')
  28. print('温度:',weatherInfo['temp1'])
  29. print('天气:',weatherInfo['weather1'])
  30. print('风速:',weatherInfo['wind1'])
  31. print('紫外线:',weatherInfo['index_uv'])
  32. print('穿衣指数:',weatherInfo['index_d'])
  33. print('48小时天气:')
  34. print('温度:',weatherInfo['temp2'])
  35. print('天气:',weatherInfo['weather2'])
  36. print('风速:',weatherInfo['wind2'])
  37. print('紫外线:',weatherInfo['index48_uv'])
  38. print('穿衣指数:',weatherInfo['index48_d'])
  39. print('72小时天气:')
  40. print('温度:',weatherInfo['temp3'])
  41. print('天气:',weatherInfo['weather3'])
  42. print('风速:',weatherInfo['wind3'])
  43. #print('紫外线:',weatherInfo['index72_uv'])
  44. #print('穿衣指数:',weatherInfo['index72_d'])
  45. input('按任意键退出')


复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 20:04:07 | 显示全部楼层
本帖最后由 2289001949 于 2018-3-23 20:06 编辑
月牙丫里 发表于 2018-3-23 19:52
重新上传一下代码,迫切需要大佬们的解惑,谢谢。
<
import urllib.request


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

点一下那个  再把代码复制进去
然后再提交  
就可以了
你把发的主题重新编辑一下就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-23 20:28:13 | 显示全部楼层
2289001949 发表于 2018-3-23 20:04
不是。。。。。。是输入框有这个符号

好的,谢谢提醒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 23:12:03 | 显示全部楼层
应该是反爬了,用模拟浏览器才爬到网页。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-24 12:23:08 | 显示全部楼层
mintaka 发表于 2018-3-23 23:12
应该是反爬了,用模拟浏览器才爬到网页。。。

应该不是,试了一下CSDN一位博主的方法,可以正常爬取中国天气网信息,不过他是用BeautifulSoup解析网页的,这里是用Json解析·的,我的python版本是3.6,会不会是我的版本问题?求解惑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()试试……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 15:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表