踩点
很简约的一个网站,老样子,我们首先按F12,进入network,筛选xhr
我们蹲到了一个post请求 https://cn.bing.com/ttranslatev3?isVertical=1&&IG=25FEE7A7C7C14533BBFD66AC5125C49E&IID=translator.5025.1
看一下参数
- 震惊!居然没有会变的参数。
代码
- 同样的我们先去找一下请求头
import requests
import re
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
'referer': 'https://cn.bing.com/translator/',
'origin': 'https://cn.bing.com',
'cookie': 'MUID=096F420F0C72689723B74D660D0869AB; MUIDB=096F420F0C72689723B74D660D0869AB; _EDGE_V=1; SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=4AA515596EB74801BC2212A2B99B705B&dmnchg=1; _SS=SID=118F574600DF62242683583D01F163BB; _TTSS_OUT=hist=WyJhZiIsImVuIl0=; _tarLang=default=en; btstkn=Ri2Gozn6GnnrscD5AGT0ykm4grRxenOXfloAsZnH9PucxJzHT%252Fwai5ui8TOq0QIK; _TTSS_IN=hist=WyJlbiIsImFmIiwiemgtSGFucyIsImF1dG8tZGV0ZWN0Il0=; SNRHOP=I=&TS=; SRCHUSR=DOB=20201106&T=1604735730000; _EDGE_S=F=1&SID=0F0E55C7A96F6A3314845ABCA82C6B51; SRCHHPGUSR=HV=1604735900&WTS=63740332530',
}
url = 'https://cn.bing.com/ttranslatev3?isVertical=1&&IG=25FEE7A7C7C14533BBFD66AC5125C49E&IID=translator.5025.1'
trans = input("请输入待翻译文本:")
data = {
'fromLang': 'auto-detect',
'text': '%s'%trans,
'to': 'en'
}
res = requests.post(url,headers=headers,data=data)
print(res.text)
- 运行结果:
- 使用正则提取结果:
result = re.search('"text":"(.*?)"',res.text).group(1)
print(result)
- 添加一个循环:
while 1:
trans = input("请输入待翻译文本:")
if trans == '-1':
break
data = {
'fromLang': 'auto-detect',
'text': '%s'%trans,
'to': 'en'
}
res = requests.post(url,headers=headers,data=data)
result = re.search('"text":"(.*?)"',res.text).group(1)
print(result)
- 再次运行:
- 非常棒
一点小探索
https://cn.bing.com/ttranslatev3?isVertical=1&&IG=25FEE7A7C7C14533BBFD66AC5125C49E&IID=translator.5025.1
- 注意到这个请求url后面的参数,疑似加密的
- 我们换一个翻译文本
- 发现请求url变成了:
https://cn.bing.com/ttranslatev3?isVertical=1&&IG=25FEE7A7C7C14533BBFD66AC5125C49E&IID=translator.5025.3
- 再换一个试试
- 放一起比较一下:
- 发现第一次的IID是5025.1,第二次翻译变成了5025.3,第三次变成了5025.5,可以看出来这个参数是一个计数器,每次翻译加2
- 而这三次,前面的IG参数都没有发生变化,我们刷新网页试试
- 发现IG参数变了,IID参数重置了!
- 我们再次对比一下:
- 看来每次刷新后IG参数会改变,而IID参数重置,只有刷新后才会改变,那么我们推测 IG 参数在网页加载的时候,就唯一确定了。
- 我们过去搜一下
- 果然!!刷新一下试试
- 发现这个 IG 参数又发生了变化,这也证明了猜测
更好的代码
- 对上面的小探索进行总结,写出一份更好的代码
import requests
import re
# 每次请求 url 的时候,获取一下 IG 参数
# 整个请求,IG参数不会再发生变化
def getIG():
header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36'}
response = requests.get('https://cn.bing.com/translator/',headers=header)
ig = re.search(',IG:"(.*?)",',response.text)
return ig.group(1)
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
'referer': 'https://cn.bing.com/translator/',
'origin': 'https://cn.bing.com',
'cookie': 'MUID=096F420F0C72689723B74D660D0869AB; MUIDB=096F420F0C72689723B74D660D0869AB; _EDGE_V=1; SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=4AA515596EB74801BC2212A2B99B705B&dmnchg=1; _SS=SID=118F574600DF62242683583D01F163BB; _TTSS_OUT=hist=WyJhZiIsImVuIl0=; _tarLang=default=en; btstkn=Ri2Gozn6GnnrscD5AGT0ykm4grRxenOXfloAsZnH9PucxJzHT%252Fwai5ui8TOq0QIK; _TTSS_IN=hist=WyJlbiIsImFmIiwiemgtSGFucyIsImF1dG8tZGV0ZWN0Il0=; SNRHOP=I=&TS=; SRCHUSR=DOB=20201106&T=1604735730000; _EDGE_S=F=1&SID=0F0E55C7A96F6A3314845ABCA82C6B51; SRCHHPGUSR=HV=1604735900&WTS=63740332530',
}
ig = getIG()
# 添加一下计数器,及IID的计数
count = 1
while 1:
trans = input("请输入待翻译文本:")
if trans == '-1':
break
data = {
'fromLang': 'auto-detect',
'text': '%s'%trans,
'to': 'en'
}
# 每次获取翻译内容,IG参数不变,IID参数每次查询后加2
url = 'https://cn.bing.com/ttranslatev3?isVertical=1&&IG=%s&IID=translator.5025.%d'%(ig,count)
res = requests.post(url,headers=headers,data=data)
result = re.search('"text":"(.*?)"',res.text).group(1)
print(result)
count = count + 2
- 运行效果