鱼C论坛

 找回密码
 立即注册
查看: 3416|回复: 14

31课视频天气查询出现403.求大神

[复制链接]
发表于 2016-12-6 14:00:32 | 显示全部楼层 |阅读模式

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

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

x

代码跟小甲鱼的一摸一样
import urllib.request
import json
import pickle
#建立城市字典
pickle_file = open('E:\\city_data.pkl', 'rb')
city = pickle.load(pickle_file)


password=input('请输入城市:')
name1=city[password]
File1 =urllib.request.urlopen('http://m.weather.com.cn/data/'+name1+'.html')#打开url
weatherHTML= File1.read().decode('utf-8')#读入打开的url
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'])
input ('按任意键退出:')


报错信息

Traceback (most recent call last):
  File "E:\天气查询1.py", line 11, in <module>
    File1 =urllib.request.urlopen('http://m.weather.com.cn/data/'+name1+'.html')#打开url
  File "C:\Users\HOME\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 163, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\HOME\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 472, in open
    response = meth(req, response)
  File "C:\Users\HOME\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 582, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Users\HOME\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 510, in error
    return self._call_chain(*args)
  File "C:\Users\HOME\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 444, in _call_chain
    result = func(*args)
  File "C:\Users\HOME\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 590, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
怎么解决求大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-6 15:02:32 | 显示全部楼层
你好  httperror: 403的意思是     Forbidden 服务器已经理解请求,但是拒绝执行它
这次因为网站的反爬虫系统    网站检测认为你是爬虫 这是恶意的   所以它禁止你   
解决办法2个  1.添加请求头headers   一般添加一个User-Agent信息就好了  还是不行就全添加了     把自己伪装成牛栏器
2. 设置代理  if 没出现这个情况即httperror403:
爬取
else:切换一个新的代理   这是伪代码  这2个你可以看看小甲鱼老师的爬虫系列   大概在53课开始讲爬虫了

给你一个参考
在你的代码    name1=city[password] 后加上
header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}
req = urllib.request.Request(url='http://m.weather.com.cn/data/'+name1+'.html',data=None,headers=headers)
# 接着把File那句改成
File1 = urllib.request.urlopen(req)
这样你试试看  不行@我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2016-12-7 11:54:16 | 显示全部楼层
ppp111 发表于 2016-12-6 15:02
你好  httperror: 403的意思是     Forbidden 服务器已经理解请求,但是拒绝执行它。
这次因 ...

Traceback (most recent call last):
  File "E:\天气查询1.py", line 12, in <module>
    req = urllib.request.Request(url='http://m.weather.com.cn/data/'+name1+'.html',data=None,headers=headers)
NameError: name 'headers' is not defined
报错。那个headers我不会弄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-7 13:26:12 | 显示全部楼层
cjq 发表于 2016-12-7 11:54
Traceback (most recent call last):
  File "E:\天气查询1.py", line 12, in
    req = urllib.reque ...

你把我的headers复制了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-8 13:21:32 | 显示全部楼层
ppp111 发表于 2016-12-7 13:26
你把我的headers复制了吗?

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

使用道具 举报

发表于 2017-2-2 09:22:01 | 显示全部楼层
同问,复制了headers依旧报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-14 19:45:32 | 显示全部楼层
NameError: name 'headers' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-25 11:24:45 | 显示全部楼层
Mua.〢、瑾 发表于 2017-2-14 19:45
NameError: name 'headers' is not defined

我的也是这样,求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 01:34:11 | 显示全部楼层
18829349625 发表于 2017-2-2 09:22
同问,复制了headers依旧报错

哈哈哈,你们复制他给的就错了
因为他的代码只是声明了一个header,所以你找不到headers
把第一行的header改成headers就行了
如下
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}
req = urllib.request.Request(url='http://m.weather.com.cn/data/'+name1+'.html',data=None,headers=headers)
# 接着把File那句改成
File1 = urllib.request.urlopen(req)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 01:35:29 | 显示全部楼层
laoyusmile 发表于 2017-3-25 11:24
我的也是这样,求解

看我的回复,你们不要只是复制别人的代码啊,他给的是错误的
第一行应该是headers,他却写得header
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-7 14:48:22 | 显示全部楼层
gopythoner 发表于 2017-3-26 01:35
看我的回复,你们不要只是复制别人的代码啊,他给的是错误的
第一行应该是headers,他却写得header



import urllib.request
import json
import pickle
#建立城市字典
pickle_file = open('city_date.pkl', 'rb')
city = pickle.load(pickle_file)


password=input('请输入城市:')
name1=city[password]
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}
req = urllib.request.Request(url='http://m.weather.com.cn/data/'+name1+'.html',data=None,headers=headers)
# 接着把File那句改成
File1 = urllib.request.urlopen(req)

weatherHTML= File1.read().decode('utf-8')#读入打开的url
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'])
input ('按任意键退出:')

  怎么还是这个错误?
Traceback (most recent call last):
  File "D:/python/零基础入门学习Python/第7章节/查询天气.py", line 14, in <module>
    File1 = urllib.request.urlopen(req)
  File "D:\Program Files\Python36\lib\urllib\request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "D:\Program Files\Python36\lib\urllib\request.py", line 532, in open
    response = meth(req, response)
  File "D:\Program Files\Python36\lib\urllib\request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "D:\Program Files\Python36\lib\urllib\request.py", line 570, in error
    return self._call_chain(*args)
  File "D:\Program Files\Python36\lib\urllib\request.py", line 504, in _call_chain
    result = func(*args)
  File "D:\Program Files\Python36\lib\urllib\request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-8-9 13:03:35 | 显示全部楼层
本帖最后由 legend818 于 2017-8-9 16:15 编辑

@all  没人解答么?接口被封了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-6 22:12:24 | 显示全部楼层
相同的问题,有人帮忙解答以下吗?感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-27 16:17:58 | 显示全部楼层
这怎么就突然没人了 刚看到31讲
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-19 19:20:59 | 显示全部楼层
legend818 发表于 2017-8-7 14:48
import urllib.request
import json
import pickle

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-8 15:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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