• python3爬虫:利用urllib与有道翻译获得翻译结果


    在实现这一功能时遇到了一些困难,由于按照《零基础入门python》中的代码无法实现翻译,会爆出“您的请求来源非法,商业用途使用请关注有道翻译API官方网站“有道智云”: http://ai.youdao.com”这种神奇的错误。无奈百度,在一篇不错的博主上找到一个优化的代码,可以实现。分享一下链接https://blog.csdn.net/c406495762/article/details/59095864#comments

     1 from urllib import request
     2 from urllib import parse
     3 import json
     4 
     5 if __name__ == "__main__":
     6     # 对应上图的Request URL
     7     request_url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
     8     # 创建Form Data字典,存储上图中的Form Data
     9     Form_Data = {}
    10     Form_Data['i'] = 'love'
    11     Form_Data['from'] = 'AUTO'
    12     Form_Data['to'] = 'AUTO'
    13     Form_Data['smartresult'] = 'dict'
    14     Form_Data['client'] = 'fanyideskweb'
    15     Form_Data['doctype'] = 'json'
    16     Form_Data['version'] = '2.1'
    17     Form_Data['keyfrom'] = 'fanyi.web'
    18     Form_Data['action'] = 'FY_BY_REALTIME'
    19     Form_Data['typoResult'] = 'false'
    20     # 使用urlencode方法转换标准格式
    21     data = parse.urlencode(Form_Data).encode('utf-8')
    22     # 传递Request对象和转换完格式的数据
    23     response = request.urlopen(request_url, data)
    24     # 读取信息并解码
    25     html = response.read().decode('utf-8')
    26     # 使用json
    27     translate_results = json.loads(html)
    28     # 找到翻译结果
    29     translate_result = translate_results["translateResult"][0][0]['tgt']
    30     # 打印翻译结果
    31     print("翻译的结果是 %s" % translate_result)
    View Code

    还有一个我在上面报错的链接里的API看到了一个版本,写了一个对应匹配参数要求的爬虫。

    (原demo无法正常运行。。我是少了个包所以就自己改写了)

    对了,使用这个方法需要在有道智云注册一个账号(收费的,不过第一次注册送100)然后需要进入我的应用里创个新应用,里面的接入方式选API,就能得到一个账号密码了

    这是我修改demo后的代码

    # -*- coding: utf-8 -*-
    import sys
    import uuid
    import urllib.request
    import urllib.parse
    import hashlib
    import time
    import json
    
    
    YOUDAO_URL = 'http://openapi.youdao.com/api'
    APP_KEY = 'ID用自己的吧2333'
    APP_SECRET = '密码当然也是'
    
    
    def encrypt(signStr):
        hash_algorithm = hashlib.sha256()
        hash_algorithm.update(signStr.encode('utf-8'))
        return hash_algorithm.hexdigest()
    
    
    def truncate(q):
        if q is None:
            return None
        size = len(q)
        return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]
    
    
    def do_request(data):
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        return urllib.request.Request(YOUDAO_URL, data=data, headers=headers)
    
    
    q = input("请输入查询的单词:
    ")
    
    data = {}
    data['from'] = 'EN'
    data['to'] = 'zh-CHS'
    data['signType'] = 'v3'
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['q'] = q
    data['salt'] = salt
    data['sign'] = sign
    data = urllib.parse.urlencode(data).encode('utf-8')
    req = do_request(data)
    response = urllib.request.urlopen(req)
    html = response.read().decode()
    target = json.loads(html)
    print(target['web'][0]['value'])
    #上面的输出可以自己定义,输出target看自己需求输出吧
  • 相关阅读:
    解决mysql-8.0.18 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    剑指Offer面试题:28.连续子数组的最大和
    Java BigDecimal
    蓝桥杯 分考场 JAVA
    蓝桥杯 合根植物 JAVA
    蓝桥杯 大臣的旅费 JAVA
    蓝桥杯 危险系数 JAVA
    蓝桥杯 幸运数 JAVA
    【转】对memcached使用的总结和使用场景
    【转】Memcached管理与监控工具----MemAdmin
  • 原文地址:https://www.cnblogs.com/llllrj/p/10501951.html
Copyright © 2020-2023  润新知