难点分析
通过抓包分析我们发现变化的是sign,ts
然后我们进入这个js文件,搜索sign
我们发现这个地方的参数和我们请求的携带参数很像,大概率这个sign是在这儿产生的,所以我们在这个地方加上断点调试,我们重新点击立即翻译,发现程序被debug住了,刚好是这个sign: b(e)这个地方,我们复制b(e)在控制台打印结果,发现刚好就是我们需要的sign,并且这个e参数就是我们输入的要翻译的内容
然后我们就去寻找这个b函数在哪里
我们进入这个js文件
这个就是我们需要的b函数,我们复制这个函数到我们的编辑器中运行
我们就加上这个r
我们开始补环境,window = {}即可
n函数没有定义,我们就去找n函数的位置
刚好就在这个b函数的上方,复制n函数之后我们运行
我们发现与b函数的打印结果不一样
可能是缺少什么参数,
经过排查,我们发现r是有初值的,我们的r是null,然后我们复制r的值之后再运行
这样sign就正确了,接下来就是写我们的爬虫代码
正常请求,没有难点
数据请求,获取结果
from pprint import pprint
import requests
import execjs
def get_info(kw, sign):
url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
headers = {
'Cookie': '''BIDUPSID=AE0057AFE3B8DD4419EE743A83E92DDF; PSTM=1691576823; BAIDUID=AE0057AFE3B8DD44868FC929D565C3D7:FG=1; ab_jid=d3be093499a4daf22882b3fdd51b39e34a37; ab_jid_BFESS=d3be093499a4daf22882b3fdd51b39e34a37; BDUSS=hHWVd3MWpzQ3U1aXgta0lyUGZsakwwTjM2TThOck9hdk0ybzVkaE85Tmc4UU5sSVFBQUFBJCQAAAAAAQAAAAEAAABAw3pg0fS54rXExKuzztGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBk3GRgZNxkUE; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BDUSS_BFESS=hHWVd3MWpzQ3U1aXgta0lyUGZsakwwTjM2TThOck9hdk0ybzVkaE85Tmc4UU5sSVFBQUFBJCQAAAAAAQAAAAEAAABAw3pg0fS54rXExKuzztGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBk3GRgZNxkUE; BAIDUID_BFESS=AE0057AFE3B8DD44868FC929D565C3D7:FG=1; BDRCVFR[kSyA9a8U-kc]=mk3SLVN4HKm; delPer=0; PSINO=6; H_PS_PSSID=26350; BA_HECTOR=8k2lala481ag2g8l0l8h012v1ie87ai1o; ZFY=LKha4xBKSnQgNRsazVDxM8YqVE8tCyE45yFYvXTRIGw:C; BCLID=11567027351725642543; BCLID_BFESS=11567027351725642543; BDSFRCVID=L-COJexroG0ZmSbfT5OjT4OTwLweG7bTDYrEOwXPsp3LGJLVFakFEG0Pts1-dEu-S2OOogKKLgOTHpkF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; BDSFRCVID_BFESS=L-COJexroG0ZmSbfT5OjT4OTwLweG7bTDYrEOwXPsp3LGJLVFakFEG0Pts1-dEu-S2OOogKKLgOTHpkF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tRAOoC_-tDvDqTrP-trf5DCShUFsWIrmB2Q-XPoO3KJADfOPbl8hXPI7j-nn-M7f5mkf3fbgy4op8P3y0bb2DUA1y4vp0toW3eTxoUJ2-KDVeh5Gqq-KXU4ebPRiWPb9QgbjBhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHj-5j5JW3f; H_BDCLCKID_SF_BFESS=tRAOoC_-tDvDqTrP-trf5DCShUFsWIrmB2Q-XPoO3KJADfOPbl8hXPI7j-nn-M7f5mkf3fbgy4op8P3y0bb2DUA1y4vp0toW3eTxoUJ2-KDVeh5Gqq-KXU4ebPRiWPb9QgbjBhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHj-5j5JW3f; ab_bid=331d6893f9043a5187e2135d347a9942a997; ab_sr=1.0.1_ODVlZjlkYTU5NmJiZTdkNzViYTllMWNhN2I0OWZhNDBiYjJkYTJlNTNiM2FjZDQ5NWNiZWYwNTczMjlkZGVhNGJmZTRmNDZlZWQxYzg5YTQwNTk1ZmJlMjJjNjBjOTM3Yjg1M2ViNTMzYTU0NmNiZmYyNTI3ZDZhYjA0MTRmYTJmZjM2ZWEzNDgyMzhmMTYxOTQ4MjE0NTZkZTIwOGYxYTk0ZjRjNDM3NGM1ZWU3N2U5NDE4OWNlODkzYzdmYjNj''',
'Host': 'fanyi.baidu.com',
'Origin': 'https://fanyi.baidu.com',
'Referer': 'https://fanyi.baidu.com/?aldtype=16047',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203',
}
data = {
'from': 'en',
'to': 'zh',
'query': kw,
'transtype': 'realtime',
'simple_means_flag': '3',
'sign': sign,
'token': '54aed88d1c9fd70488d153668668955a',
'domain': 'common',
'ts': '1692671332133',
}
res = requests.post(url=url, headers=headers, data=data)
res.encoding = 'utf-8'
json_data = res.json()
input_value = json_data['trans_result']['data'][0]['src']
result = json_data['trans_result']['data'][0]['dst']
return input_value, result
def read_js_file(kw):
with open('百度翻译.js', 'r', encoding='utf-8') as f:
sign = f.read()
return execjs.compile(sign).call('sign', kw)
def main(kw):
sign = read_js_file(kw=kw)
input_value, result = get_info(kw=kw, sign=sign)
print(f'您输入的是:{input_value} \n翻译结果为:{result}')
if __name__ == '__main__':
kw = input("请输入您想要翻译的单词或短语或句子:")
main(kw=kw)
结果展示