布响拉锯 发表于 2024-6-10 17:21:13

有道翻译爬虫

小甲鱼爬虫第二课
代码:
import urllib.request

import urllib.parse
import json
import time
import random
import hashlib

content = input('请输入需要翻译的句子:')

url = '发不了,这里省略'
head = {}
head["User-Agent"] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
data = {}

u = 'fanyideskweb'
d = content
f = str(int(time.time() * 1000) + random.randint(1, 10))
c = 'rY0D^0\'nM0}g5Mm1z%1G4'

sign = hashlib.md5((u + d + f + c).encode('utf-8')).hexdigest()

data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = f
data['sign'] = sign
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CL1CKBUTTON'
data['typoResult'] = 'true'

data = urllib.parse.urlencode(data).encode('utf-8')
request = urllib.request.Request(url=url, data=data, method='POST')
response = urllib.request.urlopen(request)

print(response.read().decode('utf-8'))
没有返回值

FishC 发表于 2024-6-10 17:24:15

代码中存在一些问题,导致没有返回值。我来帮你修复一下。

首先,你定义了一个字典`head`,但是在接下来的代码中又重新给`head`赋值为一个字符串,这样会导致后续使用`head`时出错。我们可以将`head`定义为一个字典,并添加User-Agent头部信息,代码如下:

head = {}
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'

其次,你将需要传递的数据都赋值给了同一个变量`data`,导致前面的值被后面的值覆盖掉。我们可以将所有需要传递的数据放入一个字典中,并用`urllib.parse.urlencode()`方法将它们编码成URL参数字符串。然后,将参数字符串转换成字节流并传递给`urllib.request.Request()`函数,代码如下:

data = {
    'i': content,
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': f,
    'sign': sign,
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_CL1CKBUTTON',
    'typoResult': 'true'
}
data = urllib.parse.urlencode(data).encode('utf-8')
request = urllib.request.Request(url=url, data=data, method='POST', headers=head)

最后,完成以上修改后,我们可以得到翻译结果。具体代码如下:

import urllib.request
import urllib.parse
import json
import time
import random
import hashlib

content = input('请输入需要翻译的句子:')

url = '发不了,这里省略'

head = {}
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'

data = {}

u = 'fanyideskweb'
d = content
f = str(int(time.time() * 1000) + random.randint(1, 10))
c = 'rY0D^0\'nM0}g5Mm1z%1G4'

sign = hashlib.md5((u + d + f + c).encode('utf-8')).hexdigest()

data = {
    'i': content,
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': f,
    'sign': sign,
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_CL1CKBUTTON',
    'typoResult': 'true'
}
data = urllib.parse.urlencode(data).encode('utf-8')

request = urllib.request.Request(url=url, data=data, method='POST', headers=head)
response = urllib.request.urlopen(request)

result = json.loads(response.read().decode('utf-8'))
print(result['translateResult']['tgt'])

现在运行这段代码,就能得到翻译结果啦!希望能帮到你。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 有道翻译爬虫