鱼C论坛

 找回密码
 立即注册
查看: 1685|回复: 20

[已解决]为什么我这样会报错

[复制链接]
发表于 2022-5-6 13:23:06 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 风百默 于 2022-5-6 13:48 编辑

74de7f9b46db7c34.jpg
import urllib.request
import urllib.parse
import json
content = input('请输入要翻译的内容:')
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
data = {}
data['i'] = 'l love'
data['from'] = 'AUTO'
data['to'] =  ['AUTO']
data['smartresult'] = ['dict']
data['client'] = ['fanyideskweb']
data['salt'] = ['16518125282681']
data['sign'] = ['6692eb68459b9c16e49b4c2fa6e51411']
data['lts'] = ['1651812528268']
data['bv'] = ['247811f9b7fd387f154bf67d8ebd44f3']
data['doctype'] = ['json']
data['version'] = ['2.1']
data['keyfrom'] = ['fanyi.web']
data['action'] = ['FY_BY_CLICKBUTTION']
data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')
print(html)
target = json.loads(html)
print('翻译结果:%s'%(target['translateResult'][0][0]['tgt']))
最佳答案
2022-5-6 13:23:07

键值对是字符串,你把值弄成了列表了,参考代码:
import urllib.request
import urllib.parse
import json
content = input('请输入要翻译的内容:')
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {}
data['i'] = content
data['from'] = 'AUTO'
data['to'] =  'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '16518125282681'
data['sign'] = '6692eb68459b9c16e49b4c2fa6e51411'
data['lts'] = '1651812528268'
data['bv'] = '247811f9b7fd387f154bf67d8ebd44f3'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')
print(html)
target = json.loads(html)
print('翻译结果:%s'%(target['translateResult'][0][0]['tgt']))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-6 13:26:59 | 显示全部楼层
要发文本代码哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-6 13:28:11 | 显示全部楼层
得到的数据不对,你先 print 一下 target 看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-6 13:29:53 | 显示全部楼层
target 字典 不存在 那个key吧, 检查下是不是写错了字母。~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-6 13:42:43 | 显示全部楼层
isdkz 发表于 2022-5-6 13:28
得到的数据不对,你先 print 一下 target 看看

和print(html)的值一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-6 13:43:50 | 显示全部楼层
本帖最后由 Twilight6 于 2022-5-6 13:45 编辑



把你 url 中的 _o 去掉就行了

有道反爬虫,url 中的 _o 去掉

就能去向真正服务器了,响应会正确的结果

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

使用道具 举报

发表于 2022-5-6 13:44:16 | 显示全部楼层
风百默 发表于 2022-5-6 13:42
和print(html)的值一样

你的接口写错了,把 url 的 translate_o 中的 _o 去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-6 13:48:38 | 显示全部楼层
wp231957 发表于 2022-5-6 13:26
要发文本代码哦

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

使用道具 举报

 楼主| 发表于 2022-5-6 13:51:17 | 显示全部楼层
isdkz 发表于 2022-5-6 13:44
你的接口写错了,把 url 的 translate_o 中的 _o 去掉

4291362fd5d788b3.jpg
还是报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-6 13:56:20 | 显示全部楼层
Twilight6 发表于 2022-5-6 13:43
把你 url 中的 _o 去掉就行了

有道反爬虫,url 中的 _o 去掉

后面的还是报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-6 13:23:07 | 显示全部楼层    本楼为最佳答案   

键值对是字符串,你把值弄成了列表了,参考代码:
import urllib.request
import urllib.parse
import json
content = input('请输入要翻译的内容:')
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data = {}
data['i'] = content
data['from'] = 'AUTO'
data['to'] =  'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '16518125282681'
data['sign'] = '6692eb68459b9c16e49b4c2fa6e51411'
data['lts'] = '1651812528268'
data['bv'] = '247811f9b7fd387f154bf67d8ebd44f3'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')
print(html)
target = json.loads(html)
print('翻译结果:%s'%(target['translateResult'][0][0]['tgt']))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-6 13:57:59 | 显示全部楼层
Twilight6 发表于 2022-5-6 13:56
键值对是字符串,你把值弄成了列表了,参考代码:



另外你  data['i'] 那要等于 content ,你写死了

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

使用道具 举报

 楼主| 发表于 2022-5-6 14:06:48 | 显示全部楼层
Twilight6 发表于 2022-5-6 13:43
把你 url 中的 _o 去掉就行了

有道反爬虫,url 中的 _o 去掉


已经运行成功了,谢谢,但我不明白这个要去掉的原因是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-6 14:09:41 | 显示全部楼层
风百默 发表于 2022-5-6 14:06
已经运行成功了,谢谢,但我不明白这个要去掉的原因是什么?




网易一个反爬呗,在服务器接收道请求时候 看是来自带 _o 的就响应返回一个错误的数据

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

使用道具 举报

 楼主| 发表于 2022-5-6 14:29:54 | 显示全部楼层
Twilight6 发表于 2022-5-6 14:09
网易一个反爬呗,在服务器接收道请求时候 看是来自带 _o 的就响应返回一个错误的数据

那在什么种形式下,需要去掉_o,还是说只要有_o就要去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-6 14:36:01 | 显示全部楼层
风百默 发表于 2022-5-6 14:29
那在什么种形式下,需要去掉_o,还是说只要有_o就要去掉



这只是网易的,主要是你要理解官方可能有各种反扒机制

你在学习阶段中见到一种学习一种,有可能你下次见到和这个一样也用 _o 也有可能用其他的字符

但因为我们遇到过,就积累了经验,下次有可能就能想到类似反扒解决方案,然后逐步去尝试是否能成功解决反扒

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

使用道具 举报

 楼主| 发表于 2022-5-6 17:20:41 | 显示全部楼层
Twilight6 发表于 2022-5-6 14:36
这只是网易的,主要是你要理解官方可能有各种反扒机制

你在学习阶段中见到一种学习一种,有可能你 ...

好的👌,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-7 12:29:20 | 显示全部楼层
Twilight6 发表于 2022-5-6 14:36
这只是网易的,主要是你要理解官方可能有各种反扒机制

你在学习阶段中见到一种学习一种,有可能你 ...

大佬,我还想再问你一个问题为什么第20行要用encode(utf-8),它那个网页本身不就是utf-8的方式编码的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-7 12:42:06 | 显示全部楼层
风百默 发表于 2022-5-7 12:29
大佬,我还想再问你一个问题为什么第20行要用encode(utf-8),它那个网页本身不就是utf-8的方式编码的吗?



read 方法读取网页内容返回的是 bytes 对象,即二进制对象,需要重新编码

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

使用道具 举报

 楼主| 发表于 2022-5-7 13:04:55 | 显示全部楼层
Twilight6 发表于 2022-5-7 12:42
read 方法读取网页内容返回的是 bytes 对象,即二进制对象,需要重新编码

大佬怎么判断是否需要重新编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 10:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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