鱼C论坛

 找回密码
 立即注册
查看: 4180|回复: 5

Python搜狗翻译爬虫问题求助~

[复制链接]
发表于 2020-12-10 16:30:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

大佬好呀!下面是我对搜狗翻译爬虫的代码,但是不知道为什么得到的输出结果里面并没有'你好'的翻译,可以帮忙看一下什么问题吗~

代码:
import urllib.request
import urllib.parse
import json
url = 'https://fanyi.sogou.com/reventondc/translateV3'

head = {}
head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

data = {}
data['from'] = 'auto'
data['to'] = 'en'
data['client'] = 'wap'
data['text'] = '你好'
data['uuid'] = '7a7594b9-771a-493d-951d-9db4426b7b12'
data['pid'] = 'sogou-dict-vr'
data['addSugg'] = 'on'

data = urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url, data)
html = response.read().decode('utf-8')
target = json.loads(html)
print(target)

得到的结果是:
{'data': {'detect': {'zly': 'zly', 'detect': 'zh-CHS', 'errorCode': '0', 'language': '中文', 'id': 'id', 'text': '你好'}, 'translate': {'qc_type': '1', 'zly': 'zly', 'errorCode': '20', 'index': 'content0', 'from': 'zh-CHS', 'source': 'sogou', 'text': '你好', 'to': 'en', 'id': 'id', 'dit': 'eb4q0xamc0lgokccklfg', 'orig_text': 'text', 'md5': ''}}, 'status': '0', 'info': 'success', 'node': '1', 'zly': 'zly'}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-10 17:23:20 | 显示全部楼层
你确定你这个url是翻译的地址?先随便翻译一个,在浏览器上找到翻译出来的那个地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 21:46:12 | 显示全部楼层
url = 'https://fanyi.sogou.com/reventondc/suggV3'
换这个地址看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 15:10:47 | 显示全部楼层
本帖最后由 YunGuo 于 2020-12-11 16:09 编辑

你请求的接口是https://fanyi.sogou.com/reventondc/translateV3这个接口,但你传的参数确是https://fanyi.sogou.com/reventondc/suggV3这个接口的参数。参数不对;
如果你是要获取翻译结果,那么接口是这个接口没错。
https://fanyi.sogou.com/reventondc/translateV3这个接口有两个参数是加密参数,一个是s,一个是uuid,uuid可以不传。s参数必须传。
另外搜狗还做了cookie和referer反爬。需要添加cookie参数SNUID和referer。
s生成方式很简单,就是一个MD5加密的参数,加密内容是参数中的from值+to的值+翻译原文+109984457(固定值)
例如:
from值是auto,to值是en,翻译原文是你好,那么拼接起来就是"autoen你好109984457"
对"autoen你好109984457"进行MD5加密就可以得到 s参数。
text = 'autoen你好109984457'
ha = hashlib.md5()
ha.update(text.encode())
s = ha.hexdigest()
最后将https://fanyi.sogou.com/reventondc/translateV3这个接口需要携带的参数都带上,加上cookie中的SNUID和referer去请求,就可以得到正常翻译结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 22:30:04 | 显示全部楼层
YunGuo 发表于 2020-12-11 15:10
你请求的接口是https://fanyi.sogou.com/reventondc/translateV3这个接口,但你传的参数确是https://fanyi. ...

怎么分析出来是MD5值的?加密内容是参数中的from值+to的值+翻译原文+109984457(固定值)?
求教一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-11 23:58:15 | 显示全部楼层
疾风怪盗 发表于 2020-12-11 22:30
怎么分析出来是MD5值的?加密内容是参数中的from值+to的值+翻译原文+109984457(固定值)?
求教一下

js断点调试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 03:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表