爬虫练手项目2_有道翻译

爬虫练手项目2_有道翻译

分析网页

打开: 有道翻译链接.
翻译一下‘dog’
发现url没有变化
在这里插入图片描述
这时,就需要借助浏览自带的工具来分析请求了
F12或点击右键,检查
在这里插入图片描述
点击network,刷新网页
在这里插入图片描述
在左侧页面输入翻译cat,发现,多出好几个请求

在这里插入图片描述
找到translate开头的请求,点击进去,点击preview(预览),可以看到该请求返回的数据,里面正好有我们需要的内容。
在这里插入图片描述
再点击headers,可以看到请求的url,请求方式post及参数data
在这里插入图片描述

开始爬

将url和data复制到代码里,并请求一下

# url
import requests
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
#data
data = {
    'i': 'cat',
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': '16322982070715',
    'sign': 'be2ad59034d46082605b5b5f3a153c4c',
    'lts': '1632298207071',
    'bv': '5f70acd84d315e3a3e7e05f2a4744dfa',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_REALTlME'
}
res = requests.post(url = url ,data = data)
print(res.text)

发现,并没有返回数据
在这里插入图片描述
尝试加入headers试试

# url
import requests
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
#data
data = {
    'i': 'cat',
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': '16322982070715',
    'sign': 'be2ad59034d46082605b5b5f3a153c4c',
    'lts': '1632298207071',
    'bv': '5f70acd84d315e3a3e7e05f2a4744dfa',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_REALTlME'
}
#headers
headers = {
    'Cookie': 'OUTFOX_SEARCH_USER_ID=751892333@10.169.0.82; OUTFOX_SEARCH_USER_ID_NCOO=873064780.2760743; JSESSIONID=aaagCNpJ0Kk4ccAehSlWx; ___rl__test__cookies=1632283864711',
    'Referer': 'https://fanyi.youdao.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}
res = requests.post(url = url ,data = data,headers = headers)
print(res.text)

发现,可以获取到数据,但一段时间后,就不行了

这是因为data 的原因

data里的
salt: 16322982070715
lts: 1632298207071
都是和时间有关的
这可以用代码实时生成一下

#构造时间戳
t = int(time.time()*10000)#长度为14的时间戳
lts = t//10               #长度为13的时间戳
# url
import time

import requests
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
#data
#构造时间戳
t = int(time.time()*10000)#长度为14的时间戳
lts = t//10               #长度为13的时间戳
data = {
    'i': 'cat',
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': str(t),
    'sign': 'be2ad59034d46082605b5b5f3a153c4c',
    'lts': str(lts),
    'bv': '5f70acd84d315e3a3e7e05f2a4744dfa',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_REALTlME'
}
#headers
headers = {
    'Cookie': 'OUTFOX_SEARCH_USER_ID=751892333@10.169.0.82; OUTFOX_SEARCH_USER_ID_NCOO=873064780.2760743; JSESSIONID=aaagCNpJ0Kk4ccAehSlWx; ___rl__test__cookies=1632283864711',
    'Referer': 'https://fanyi.youdao.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}
res = requests.post(url = url ,data = data,headers = headers)
print(res.text)

再运行一下,发现竟还是无返回数据,
在这里插入图片描述
这是因为sign也是随时间变化的

ctrl+F搜索一下sign,如果搜索不到就刷新一下页面
在这里插入图片描述
点击第一个
在这里插入图片描述
然后
在这里插入图片描述
在这里插入图片描述
再ctrl+F搜索sign
在这里插入图片描述
在这里插入图片描述
可以找到sign的生成方法
sign: n.md5(“fanyideskweb” + e + i + “Y2FYu%TNSbMCxc3t2u^XT”)
这里的e是指要翻译的内容,i是14位时间戳

sign_data = "fanyideskweb" + i + str(t) + "Y2FYu%TNSbMCxc3t2u^XT"  #i表示关键词,t表示时间戳
sign = hashlib.md5(sign_data.encode('utf-8')).hexdigest()

加上sign后,就可以了
在这里插入图片描述
之后就是把翻译后的内容从数据里提取出来了

res = requests.post(url = url ,data = data,headers = headers)
result_data = json.loads(res.content.decode())
result = result_data['translateResult'][0][0]['tgt']
print(result)

在这里插入图片描述

完整代码

# url
import hashlib
import json
import time

import requests
url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
#data
#构造时间戳
t = int(time.time()*10000)#长度为14的时间戳
lts = t//10               #长度为13的时间戳
i = input('输入要翻译的内容:')

sign_data = "fanyideskweb" + i + str(t) + "Y2FYu%TNSbMCxc3t2u^XT"  #i表示关键词,t表示时间戳
sign = hashlib.md5(sign_data.encode('utf-8')).hexdigest()

data = {
    'i': i,
    'from': 'AUTO',
    'to': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': str(t),
    'sign': sign,
    'lts': str(lts),
    'bv': '5f70acd84d315e3a3e7e05f2a4744dfa',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom': 'fanyi.web',
    'action': 'FY_BY_REALTlME'
}
#headers
headers = {
    'Cookie': 'OUTFOX_SEARCH_USER_ID=751892333@10.169.0.82; OUTFOX_SEARCH_USER_ID_NCOO=873064780.2760743; JSESSIONID=aaagCNpJ0Kk4ccAehSlWx; ___rl__test__cookies=1632283864711',
    'Referer': 'https://fanyi.youdao.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}
res = requests.post(url = url ,data = data,headers = headers)
result_data = json.loads(res.content.decode())
result = result_data['translateResult'][0][0]['tgt']
print('{} 翻译为: {}'.format(i,result))

最后,试了一下中文翻译成英文
在这里插入图片描述
study hard and make progress every day

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我小兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值