为什么我这样会报错
本帖最后由 风百默 于 2022-5-6 13:48 编辑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']['tgt'])) 要发文本代码哦 得到的数据不对,你先 print 一下 target 看看 target 字典 不存在 那个key吧, 检查下是不是写错了字母。~ isdkz 发表于 2022-5-6 13:28
得到的数据不对,你先 print 一下 target 看看
和print(html)的值一样 本帖最后由 Twilight6 于 2022-5-6 13:45 编辑
把你 url 中的 _o 去掉就行了
有道反爬虫,url 中的 _o 去掉
就能去向真正服务器了,响应会正确的结果
风百默 发表于 2022-5-6 13:42
和print(html)的值一样
你的接口写错了,把 url 的 translate_o 中的 _o 去掉 wp231957 发表于 2022-5-6 13:26
要发文本代码哦
已发 isdkz 发表于 2022-5-6 13:44
你的接口写错了,把 url 的 translate_o 中的 _o 去掉
还是报错 Twilight6 发表于 2022-5-6 13:43
把你 url 中的 _o 去掉就行了
有道反爬虫,url 中的 _o 去掉
后面的还是报错了
键值对是字符串,你把值弄成了列表了,参考代码:
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']['tgt'])) Twilight6 发表于 2022-5-6 13:56
键值对是字符串,你把值弄成了列表了,参考代码:
另外你data['i'] 那要等于 content ,你写死了
Twilight6 发表于 2022-5-6 13:43
把你 url 中的 _o 去掉就行了
有道反爬虫,url 中的 _o 去掉
已经运行成功了,谢谢,但我不明白这个要去掉的原因是什么? 风百默 发表于 2022-5-6 14:06
已经运行成功了,谢谢,但我不明白这个要去掉的原因是什么?
网易一个反爬呗,在服务器接收道请求时候 看是来自带 _o 的就响应返回一个错误的数据
Twilight6 发表于 2022-5-6 14:09
网易一个反爬呗,在服务器接收道请求时候 看是来自带 _o 的就响应返回一个错误的数据
那在什么种形式下,需要去掉_o,还是说只要有_o就要去掉 风百默 发表于 2022-5-6 14:29
那在什么种形式下,需要去掉_o,还是说只要有_o就要去掉
这只是网易的,主要是你要理解官方可能有各种反扒机制
你在学习阶段中见到一种学习一种,有可能你下次见到和这个一样也用 _o 也有可能用其他的字符
但因为我们遇到过,就积累了经验,下次有可能就能想到类似反扒解决方案,然后逐步去尝试是否能成功解决反扒
Twilight6 发表于 2022-5-6 14:36
这只是网易的,主要是你要理解官方可能有各种反扒机制
你在学习阶段中见到一种学习一种,有可能你 ...
好的👌,谢谢 Twilight6 发表于 2022-5-6 14:36
这只是网易的,主要是你要理解官方可能有各种反扒机制
你在学习阶段中见到一种学习一种,有可能你 ...
大佬,我还想再问你一个问题为什么第20行要用encode(utf-8),它那个网页本身不就是utf-8的方式编码的吗? 风百默 发表于 2022-5-7 12:29
大佬,我还想再问你一个问题为什么第20行要用encode(utf-8),它那个网页本身不就是utf-8的方式编码的吗?
read 方法读取网页内容返回的是 bytes 对象,即二进制对象,需要重新编码
Twilight6 发表于 2022-5-7 12:42
read 方法读取网页内容返回的是 bytes 对象,即二进制对象,需要重新编码
大佬怎么判断是否需要重新编码
页:
[1]
2