分析网页
打开: 有道翻译链接.
翻译一下‘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