Python有道英译汉词典

选择有道翻译是因为相对好爬。

方案一

在词典网页中直接抓取词义。
参考资料: https://www.cnblogs.com/nkqlhqc/p/7627581.html
特点:比较简单易行,不需要涉及与网页的交互。
程序:

# 有道词典  英译汉
# 参考资料: https://www.cnblogs.com/nkqlhqc/p/7627581.html
# 关于re.compile(): https://www.cnblogs.com/nomorewzx/p/4203829.html
import requests     # 抓取网页的第三方库
import re           # 正则表达式的库

print("来自有道词典,请输入需要查询的英语单词\n")
while (True):
    word = input(">>")
    url = "http://dict.youdao.com/w/"+word+"/#keyfrom=dict2.top"
    html = requests.get(url).content.decode('utf-8')       # 访问网址

    try:
        partlist = re.findall('class="trans-container"(.*?)class="additional"', html, re.S)     # 初步筛选
    except:
        print("没找到\n")
    else:
        reg1 = '
  • (.*?)
  • ' # 模糊匹配,找
  • 中间的部分 reg2 = re.compile(reg1) # 使得匹配更加高效 try: wordlist = re.findall(reg2, str(partlist[0])) # 那串列表中的第一页是有效的 except: print("没找到\n") else: for x in wordlist: print(" "+x) print("\n")

    结果图:

     

    Python有道英译汉词典_第1张图片

    程序1的结果图

    另一个程序:
    用了爱词霸网。

    # 爱词霸词典  英译汉
    # 参考资料: https://www.cnblogs.com/nkqlhqc/p/7627581.html
    # 关于re.compile(): https://www.cnblogs.com/nomorewzx/p/4203829.html
    import requests     # 抓取网页的第三方库
    import re           # 正则表达式的库
    
    print("来自有道词典,请输入需要查询的英语单词\n")
    while (True):
        word = input(">>")
        url = "http://www.iciba.com/"+word
        html = requests.get(url).content.decode('utf-8')       # 访问网址
    
        try:
            partlist = re.findall('
      (.*?)
    ', html, re.S) # 初步筛选 except: print("没找到\n") else: reg1 = '(.*?)' # 模糊匹配,找
  • 中间的部分 reg2 = re.compile(reg1) # 使得匹配更加高效 try: wordlist = re.findall(reg2, str(partlist)) except: print("没找到\n") else: for x in wordlist: print(" "+x) print("\n")

    结果图:

     

    Python有道英译汉词典_第2张图片

    程序2的结果图

     

    PS:程序中缩进太多,不好,python应多使用子函数。

    方案二

    使用POST向网页发送请求,避开反爬虫使用老版接口,即去掉url中的“_o”。
    参考资料:
    https://www.cnblogs.com/90zeng/p/python_translation.html(关于在哪里看POST的格式的)
    http://blog.csdn.net/nunchakushuang/article/details/75294947(关于反爬虫)
    http://blog.csdn.net/snszwh/article/details/78168660(关于老版接口)
    特点:使用了POST进行网页交互,但放弃了反爬虫处理。
    程序:

    # 有道字典  英译汉
    # 参考资料1: https://www.cnblogs.com/90zeng/p/python_translation.html
    # 参考资料2:http://blog.csdn.net/nunchakushuang/article/details/75294947
    # 参考资料3:http://blog.csdn.net/snszwh/article/details/78168660
    import urllib.request
    import urllib.parse
    import json
    import time
    import random
    import hashlib
    import re
    
    def get_html(word):
        url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"  # 重点是去掉这里的_o
    
        data = {}
    
        data['i'] = word
        data['from'] = 'AUTO'
        data['to'] = 'AUTO'
        data['smartresult'] = 'dict'
        data['client'] = 'fanyideskweb'
        data['salt'] = '1519801903001'
        data['sign'] = 'ea1617dd1a4772cd6f47b45bab7c2a0f'
        data['doctype'] = 'json'
        data['version'] = '2.1'
        data['keyfrom'] = 'fanyi.web'
        data['action'] = 'FY_BY_CLICKBUTTION'
        data['typoResult'] = 'false'
        data = urllib.parse.urlencode(data).encode('utf-8')
    
        request = urllib.request.Request(url=url, data=data, method='POST')
        response = urllib.request.urlopen(request)
        result_str = response.read().decode('utf-8')
        return result_str
    
    def main():
        word = input('>>')
        result_str = get_html(word)
        target = json.loads(result_str)
        trans = re.findall('tgt\': \'(.*?)\'', str(target))
        print("   "+ str(trans[0])+"\n")  
    
    if __name__ == "__main__":  
        print("来源:有道词典\n输入需要查询的词\n\n")
        while(True):
            main()
    

    结果图:

     

    Python有道英译汉词典_第3张图片

    程序3的结果图

    方案三

    这是涉及到反爬虫处理的一篇博客:http://blog.csdn.net/shadkit/article/details/79174948

    你可能感兴趣的:(Python学习笔记)