鱼C论坛

 找回密码
 立即注册
查看: 1792|回复: 4

[已解决]爬取有道翻译求助

[复制链接]
发表于 2020-2-8 10:49:11 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 collin_liu 于 2020-2-8 12:45 编辑

Form data 数据项中有几项是可变的,甲鱼讲的例子中用的是以前的版本,所有项都是不变的,哪位大神能回答下可变项怎么处理吗?感谢!!!
  • i:
    horse
  • from:
    AUTO
  • to:
    AUTO
  • smartresult:
    dict
  • client:
    fanyideskweb
  • salt:
    15811300544545  (可变)
  • sign:
    1995f9d89925f2942ea34e5edb1f5c21  
    (可变)
  • ts:
    1581130054454  
    (可变)
  • bv:
    b396e111b686137a6ec711ea651ad37c
  • doctype:
    json
  • version:
    2.1
  • keyfrom:
    fanyi.web
  • action:
    FY_BY_REALTlME






代码结构跟访问iciba的其实是一样的,但是访问iciba可以得到有效返回,访问有道时就返回{'errorCode': 50},没有得到想要的结果。不知道怎么回事???

最佳答案
2020-2-8 13:02:11
  1. import urllib.request
  2. import urllib.parse
  3. import json

  4. import time
  5. import random
  6. import hashlib

  7. def sign(content, salt):
  8.         client = 'fanyideskweb'   
  9.         suffix = 'n%A-rKaT5fb[Gy?;N5@Tj'

  10.         generated_sign = hashlib.md5((client + content + salt + suffix).encode('utf-8')).hexdigest()
  11.         return generated_sign

  12. def version():
  13.     ver = '5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
  14.     build_version = hashlib.md5(ver.encode('utf-8')).hexdigest()
  15.     return build_version

  16. def build_data(content):
  17.     data = dict()
  18.     data['i'] = content
  19.     data['from'] = 'AUTO'
  20.     data['to'] = 'AUTO'
  21.     data['smartresult'] = 'dict'
  22.     data['client'] = 'fanyideskweb'
  23.     data['salt'] = str(int(time.time()*1000) + random.randint(1,10))
  24.     data['sign'] = sign(content, data['salt'])
  25.     data['ts'] = str(int(time.time()*1000))
  26.     data['bv'] = version()
  27.     data['doctype'] = 'json'
  28.     data['version'] = '2.1'
  29.     data['keyfrom'] = 'fanyi.web'
  30.     data['action'] = 'FY_BY_CLICKBUTTION'

  31.     return data

  32. content = '贵在坚持, 持之以恒'
  33. url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=http://www.youdao.com"

  34. data = build_data(content)
  35. data = urllib.parse.urlencode(data).encode('utf-8')

  36. req = urllib.request.Request(url, data)
  37. req.add_header('Referer', 'http://fanyi.youdao.com')
  38. req.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36')
  39. response = urllib.request.urlopen(req)
  40. html = response.read().decode('utf-8')
  41. target = json.loads(html)
  42. print("翻译结果:%s" % (target['translateResult'][0][0]['tgt']))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-8 11:02:34 | 显示全部楼层
本帖最后由 一个账号 于 2020-2-8 11:06 编辑

可变的可以不用写,不信你试试。(而且 bv 也是可变的)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-8 12:06:53 | 显示全部楼层
一个账号 发表于 2020-2-8 11:02
可变的可以不用写,不信你试试。(而且 bv 也是可变的)

谢谢,我试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-8 13:02:11 | 显示全部楼层    本楼为最佳答案   
  1. import urllib.request
  2. import urllib.parse
  3. import json

  4. import time
  5. import random
  6. import hashlib

  7. def sign(content, salt):
  8.         client = 'fanyideskweb'   
  9.         suffix = 'n%A-rKaT5fb[Gy?;N5@Tj'

  10.         generated_sign = hashlib.md5((client + content + salt + suffix).encode('utf-8')).hexdigest()
  11.         return generated_sign

  12. def version():
  13.     ver = '5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
  14.     build_version = hashlib.md5(ver.encode('utf-8')).hexdigest()
  15.     return build_version

  16. def build_data(content):
  17.     data = dict()
  18.     data['i'] = content
  19.     data['from'] = 'AUTO'
  20.     data['to'] = 'AUTO'
  21.     data['smartresult'] = 'dict'
  22.     data['client'] = 'fanyideskweb'
  23.     data['salt'] = str(int(time.time()*1000) + random.randint(1,10))
  24.     data['sign'] = sign(content, data['salt'])
  25.     data['ts'] = str(int(time.time()*1000))
  26.     data['bv'] = version()
  27.     data['doctype'] = 'json'
  28.     data['version'] = '2.1'
  29.     data['keyfrom'] = 'fanyi.web'
  30.     data['action'] = 'FY_BY_CLICKBUTTION'

  31.     return data

  32. content = '贵在坚持, 持之以恒'
  33. url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=http://www.youdao.com"

  34. data = build_data(content)
  35. data = urllib.parse.urlencode(data).encode('utf-8')

  36. req = urllib.request.Request(url, data)
  37. req.add_header('Referer', 'http://fanyi.youdao.com')
  38. req.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36')
  39. response = urllib.request.urlopen(req)
  40. html = response.read().decode('utf-8')
  41. target = json.loads(html)
  42. print("翻译结果:%s" % (target['translateResult'][0][0]['tgt']))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-8 13:29:43 | 显示全部楼层
只用写 i、to、smartresult、doctype、version、keyfrom、action 就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 21:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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