江安叔叔 发表于 2020-9-21 11:01:23

python爬虫翻译(第54讲)

第54讲,跟着视频敲data,本人电脑‘data’与视频‘data’有所不同,两种都写了一次
本人电脑:
data['i']='我爱你'
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='16006545821886'
data['sign']='a8c1d4e43dc52b129a9f37276b29b211'
data['lts']='1600654582188'
data['bv']='bbb3ed55971873051bc2ff740579bb49'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_CLICKBUTTION'

视频里:data['i']='我爱你'
data['type']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['ue']='utf-8'
data['typoResult']='true'

最后运行的结果都是这个{"errorCode":50}
不知出了什么问题

suchocolate 发表于 2020-9-21 12:46:13

估计是url问题,要去掉: _o
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
另外代码贴全才能准确判定。

YunGuo 发表于 2020-9-21 15:35:22

有道翻译有反爬措施。
一、headers
设置一下User-Agent、referer
二、data
1、lts是一个13位时间戳,salt是 lts + 1位随机数
2、sign是一个加密验证,每次请求都是不一样的,利用MD5加密的参数是:client + i + salt + 一个固定字符串 "]BjuETDhU)zqSxf-=B#7m"
3、bv,这个也是一个MD5加密的参数,加密的内容是当前使用的浏览器的User-Agent,去掉其中的 " Mozilla/ ",如果User-Agent不变,这个参数也不需要改变,否则要重新利用MD5生成。
三、cookie
value填自己浏览器上的。
OUTFOX_SEARCH_USER_ID: ""

headers、data参数、cookie缺一不可。否则请求不到数据。

疾风怪盗 发表于 2020-9-22 01:02:09

url里_o去掉就行了
import urllib.request
import urllib.parse

url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"

date = {}

date['i'] = 'I love'
date['from']= 'AUTO'
date['to']= 'AUTO'
date['smartresult'] = 'dict'
date['client'] = 'fanyideskweb'
date['salt'] ='16006938600377'
date['sign']= '3ad24abcb708e97a655860210c3bfe0a'
date['lts'] ='1600693860037'
date['bv'] =' e9c283fcdef47746c8a8c8d0ed42d0ce'
date['doctype'] = 'json'
date['version'] = '2.1'
date['keyfrom'] = 'anyi.web'
date['action'] = 'FY_BY_CLICKBUTTION'
data = urllib.parse.urlencode(date).encode('utf-8')

response = urllib.request.urlopen(url,data)

html = response.read().decode('utf-8')

print(html)

一抹心尘 发表于 2020-10-30 15:29:39

是这样的,书本已经是几年前了,代码需要不断迭代,现在有道有了反爬虫的措施。
你要保证你的headers、data参数、cookie这3个必须是没有任何问题的,我帮你改了一下。
import urllib.request
import urllib.parse

url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"

date = {}

date['i'] = 'I love'
date['from']= 'AUTO'
date['to']= 'AUTO'
date['smartresult'] = 'dict'
date['client'] = 'fanyideskweb'
date['salt'] ='16006938600377'
date['sign']= '3ad24abcb708e97a655860210c3bfe0a'
date['lts'] ='1600693860037'
date['bv'] =' e9c283fcdef47746c8a8c8d0ed42d0ce'
date['doctype'] = 'json'
date['version'] = '2.1'
date['keyfrom'] = 'anyi.web'
date['action'] = 'FY_BY_CLICKBUTTION'
data = urllib.parse.urlencode(date).encode('utf-8')

response = urllib.request.urlopen(url,data)

html = response.read().decode('utf-8')

print(html)
页: [1]
查看完整版本: python爬虫翻译(第54讲)