用Python写个有道翻译的爬虫

python版本3.7

主要功能是连接有道翻译进行中英互译(其他语言还没有尝试)

然后,直接贴代码了

import urllib
import urllib.parse
import hashlib
import time
import random

headers = {
    'Cookie': 'OUTFOX_SEARCH_USER_ID=-2022895048@10.168.8.76;',
    'Referer': 'http://fanyi.youdao.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; rv:51.0) Gecko/20100101 Firefox/51.0',
}


content = input('输入你想翻译的内容')
salt = str(int(time.time() * 1000) + random.randint(0, 10))
client = "fanyideskweb"
AppKey = "ebSeFb%=XZ%T[KZ)c(sy!"
sign = hashlib.md5((client+content+salt+AppKey).encode('utf-8')).hexdigest()
###salt和sign的加密措施

url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'


data = {}

data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = salt
data['sign'] = sign
data['doctype'] = 'json'
data['version'] = '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_REALTIME'
data['typoResult'] = 'false'

data = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url, data=data, headers=headers)
###利用urllib package 需要加上header,或者可以直接用requests加上header
response = urllib.request.urlopen(req)

text = response.read().decode('utf-8')
###解码,可以将返回数据变为Unicode格式,把中文变回来
#print(text)

infos = json.loads(text)
if 'translateResult' in infos:
    try:
        yuanwen = infos['translateResult'][0][0]['src']
        试试decode的效果
        result = infos['translateResult'][0][0]['tgt']
        print(yuanwen,'的翻译是',result)
    except:
        pass

tips:

  1. 请求需要带上header,直接用的urllib.request.Request(),其他方式如add_header未尝试,也可以直接用requests函数内加上headers
  2. 请求成功后返回的数据是utf-8编码的,需要解码,然后得到一个json类型的数据格式,使用json.loads()将其转为字典类型。
  3. 部分实现方案参考了https://blog.csdn.net/qq_26877377/article/details/80550655http://www.tendcode.com/article/youdao-spider/,还有小甲鱼的python爬虫教程。
  4. 另外尝试在开头使用代理服务器时出现错误,推测是代理服务器的header冲突或疏漏,留待以后解决。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值