Python3—爬虫实现有道在线翻译—(常见错误汇总及解决方法)

今天尝试了一个Python3的爬虫项目:

Python3实现有道在线翻译

代码实现过程中遇到一些问题,经过研究都找到了对应的解决方法,先将遇到的问题和解决方法汇总如下,供大家参考:

有道在线翻译是POST实现的,百度翻译是GET实现的。
有道翻译每次翻译的时候,最上方地址栏中的地址时固定不变的,可以猜测有道是通过post请求实现翻译功能的。(注:判断post与get请求最显著的区别就是url地址是否发生变化,发生变化了就是get,反之则是post请求,post请求的参数是在表单里)

先放最终项目实现的源码:

# Python3实现有道在线翻译案例
# 有道在线翻译http://fanyi.youdao.com/

import json
from urllib import request, parse

if __name__ == '__main__':

    key = input("请输入需要翻译的文字(输入完成后请按Enter): ")

    # 打开有道在线翻译,输入girl,检查,找到headers,复制里面的网址
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

    # 将网页中的Form Data中的所有数据复制出来
    # 通过调试发现,只需要其中的i对应要翻译的内容和doctype对应的数据格式
    formdata = {
        'i': key,
        'doctype': 'json',
    }

    # formdata中的数据需要转换为bytes格式
    data = parse.urlencode(formdata).encode()

    # 将网页中的请求头Request Headers中的数据复制出来,只需要一个用户代理即可
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71',
    }

    # 请求网页
    req = request.Request(url=url, data=data, headers=headers)

    # 返回网页
    res = request.urlopen(req)

    # 下载导出数据
    result = json.loads(res.read())

    # 打印出翻译后的结果
    print("\n翻译结果: " + result["translateResult"][0][0]["tgt"])
    

输出结果:

中译英

请输入需要翻译的文字(输入完成后请按Enter): 我爱你,亲爱的包包

翻译结果: I love you, my dear bag

英译中

请输入需要翻译的文字(输入完成后请按Enter): I LOVE YOU BABY

翻译结果: 我爱你宝贝

问题汇总

问题1:

出现以下错误:“errorcode”:50
解决方法:将原网址中的_o删除
- 原网址:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
- 修改后网址:http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule
- _o的可能用途:有道翻译在线进行了加密过程,检查源码发现formdata中有salt(一个时间戳)和sign(加密后的字段)两个数据
- 如果要用带_o的网址,需要将这两个参数带上,但是只能翻译你网页刚刚翻译的那个单词,翻译其它的代码会一直处于等待状态。。。可能是加密引起的。
Python3—爬虫实现有道在线翻译—(常见错误汇总及解决方法)