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 = '<li>(.*?)</li>'    # 模糊匹配,找<li>与</li>中间的部分 
        reg2 = re.compile(reg1)    # 使得匹配更加高效
        try:
            wordlist = re.findall(reg2, str(partlist[0]))   # 那串列表中的第一页是有效的
        except:
            print("没找到\n")
        else:
            for x in wordlist:
                print("   "+x)
            print("\n")

结果图:


程序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('<ul class="base-list switch_part" class="">(.*?)</ul>', html, re.S)      # 初步筛选
    except:
        print("没找到\n")
    else:
        reg1 = '<span>(.*?)</span>'    # 模糊匹配,找<li>与</li>中间的部分 
        reg2 = re.compile(reg1)    # 使得匹配更加高效
        try:
            wordlist = re.findall(reg2, str(partlist))
        except:
            print("没找到\n")
        else:
            for x in wordlist:
                print("   "+x)
            print("\n")

结果图:


程序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()

结果图:


程序3的结果图

方案三

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,455评论 25 708
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 3,055评论 1 3
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,579评论 6 427
  • 从未如此感受到传承的力量,与父亲的伟大。今天把父亲的钱印证转账,转到股票账户的那刻,才感受到自己的责任。父亲普普通...
    yichen大刀阅读 296评论 0 0
  • 毕业班研讨会 今天下午第四节,九年级教师要开会。我第一个跑到三楼,一个人没人,我徘徊在楼梯口。听到崔校长上来了,随...
    鸣鸥阅读 225评论 0 2