mongoole 发表于 2018-3-30 18:07:55

Python爬虫百度翻译--error 997

#coding:utf-8
import urllib.request,urllib.parse

content = input('请输入需要翻译的内容:')

url = 'http://fanyi.baidu.com/v2transapi'

langdetect_url = 'http://fanyi.baidu.com/langdetect'

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
         ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
         }

data = {'from': 'en','to': 'zh','simple_means_flag': '3','transtype': 'realtime',
      'sign': '124092.329613','token': '3543aae597537a73df19a097215efa55'
      }

data['query'] = content

data = urllib.parse.urlencode(data).encode('utf-8')

req = urllib.request.Request(url,data=data,headers=headers)
response = urllib.request.urlopen(req)
html = response.read().decode('utf-8')
print(html)

mongoole 发表于 2023-4-26 14:19:01

时隔4年,回来看了一眼。
没有同学再去写这个sign的逆向,我来简单的说一下吧。
1.常规操作-F12调试
2.全局搜索sign,并断点找出sign的来源(index的那个js文件)。sign: b(e),如图sign-2023-04-26

3.console调试。输入b后出现f(t)函数,鼠标点击该函数直接就跳转到js文件。
4.至此sign的值就已经真相大白了呀。

ba21 发表于 2018-3-30 18:37:27

网站反爬,就好比密码,你没有给对相应的密码当然返回错误。换个网站爬吧。

°蓝鲤歌蓝 发表于 2018-3-30 19:43:38

'sign': '124092.329613'
这个 sign 是js加密的。

mongoole 发表于 2018-3-30 21:49:44

°蓝鲤歌蓝 发表于 2018-3-30 19:43
这个 sign 是js加密的。

谢谢!看了一下,每次都变动,不是固定值。

mongoole 发表于 2018-3-30 21:50:37

ba21 发表于 2018-3-30 18:37
网站反爬,就好比密码,你没有给对相应的密码当然返回错误。换个网站爬吧。

3q

Cczhou 发表于 2018-5-1 11:45:23

为什么这个sign每次变动能做到反爬呢,我人为的去网站输入,它不也在动吗。
另外为了可以不报错,可以把header改成手机版浏览,url也换成手机版的http://fanyi.baidu.com/basetrans。
实测可用。
import urllib.request
import urllib.parse
import json

content = input('请输入要翻译的句子: ')
youdao_url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
baidu_url = 'http://fanyi.baidu.com/basetrans'

data = {}
data2 = {}

data['i']= content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '1525141473246'
data['sign'] = '47ee728a4465ef98ac06510bf67f3023'
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data['typoResult'] = 'false'
data = urllib.parse.urlencode(data).encode('utf-8')

data2['from'] = 'zh'
data2['to'] = 'en'
data2['query'] = content
data2['transtype'] = 'translang'
data2['simple_means_flag'] = '3'
data2['sign'] = '94582.365127'
data2['token'] = 'ec980ef090b173ebdff2eea5ffd9a778'
data2 = urllib.parse.urlencode(data2).encode('utf-8')

headers = {"User-Agent":"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"}

youdao_response = urllib.request.urlopen(youdao_url, data)
baidu_re = urllib.request.Request(baidu_url, data2, headers)
baidu_response = urllib.request.urlopen(baidu_re)

youdao_html = youdao_response.read().decode('utf-8')
baidu_html = baidu_response.read().decode('utf-8')

target = json.loads(youdao_html)
target2 = json.loads(baidu_html)

print('【有道】翻译为: %s'%(target['translateResult']['tgt']))
print('【百度】翻译为: %s'%(target2['trans']['dst']))

mongoole 发表于 2018-5-10 09:58:33

Cczhou 发表于 2018-5-1 11:45
为什么这个sign每次变动能做到反爬呢,我人为的去网站输入,它不也在动吗。
另外为了可以不报错,可以把he ...

嗯,移动端的着实可以~

曲水竹莲 发表于 2019-1-11 14:11:23

移动端有道翻译可以爬取到,百度翻译还是不可以

闹钟你别响 发表于 2019-1-26 11:03:12

用代码搞出了sign,也是不行,不知道怎么破

闹钟你别响 发表于 2019-1-26 11:03:58

mongoole 发表于 2018-5-10 09:58
嗯,移动端的着实可以~

移动端没检查这个

zylialiali 发表于 2019-3-19 16:42:43

本帖最后由 zylialiali 于 2019-3-19 17:02 编辑

实测上面6楼的代码也不行,移动端的也不能用了吗?
target并没有trans关键字。

-----编辑一下-----
是接口错了,应该是 url = 'https://fanyi.baidu.com/transapi'
果然是万能的百度

learningifsh 发表于 2019-3-22 11:29:33

zylialiali 发表于 2019-3-19 16:42
实测上面6楼的代码也不行,移动端的也不能用了吗?
target并没有trans关键字。



您好 请问这个Url是怎么获得的 我在报文中没有发现这个url啊 谢谢解答!

zylialiali 发表于 2019-3-23 15:42:11

learningifsh 发表于 2019-3-22 11:29
您好 请问这个Url是怎么获得的 我在报文中没有发现这个url啊 谢谢解答!

别人的帖子看到的,不知道怎么来的,反正原来的v2那个服务器是不对的(好像是什么德语的(误)?)。
自己百度搜搜看吧,我也找不到链接了

learningifsh 发表于 2019-3-23 18:14:22

zylialiali 发表于 2019-3-23 15:42
别人的帖子看到的,不知道怎么来的,反正原来的v2那个服务器是不对的(好像是什么德语的(误)?)。
自 ...

谢谢!

吃掉大鲨鱼 发表于 2019-6-1 21:58:51

都在反爬虫,才开始学习没有实操也太难了吧
页: [1]
查看完整版本: Python爬虫百度翻译--error 997