zoukankan      html  css  js  c++  java
  • 使用Perl5获取有道词典释义

    Get Word Definition from dict.youda.com

    via Perl Script

    获取基本释义

    Get Basic Definition

    http://dict.youdao.com/fsearch?q=abstain&doctype=json&xmlVersion=3.2&Version=1.2

    • ** q ** 要查的单词或词组
    • 只能返回xml格式的,xmlVersion不同会有不同

    或者使用
    linux命令行下翻译工具

    但是没有网页版获取的全

    所以那就提取页面文字呗

    #!/usr/bin/perl
    
    use utf8;
    use v5.18.2;
    binmode STDOUT, 'utf8';
    binmode STDERR, 'utf8';
    
    use Web::Query;
    use HTML::Entities;
    my $ok;
    my $saveDir = '/Users/ruili/Code/Perl5/word';
    my $word = $ARGV[0];
    if ( -f "$saveDir/".$ARGV[0] && ! -z "$saveDir/".$ARGV[0] ) {
        #如果文件不为空
        say "$ARGV[0]已经存在了";
        exit;
    }
    open OUT, ">$saveDir/".$ARGV[0] or die "Write out Die
    "; 
    binmode OUT, 'utf8';
    
    my $desc = wq("http://dict.youdao.com/w/eng/".$word."/#keyfrom=dict2.index");
    
    # 是否有柯林斯解释
    my $ok = ${$desc->find("#collinsResult")->{trees}}[0];
    if (! $ok){
        #没有柯林斯
        say STDERR "没有柯林斯词典";
    }else{
        # 获取柯林斯解释
        say OUT "
    ##########柯林斯英汉词典##########
    ";
        my $collinsDesc = $desc->find('#collinsResult')->find('.ol');
        $collinsDesc->find('.collinsMajorTrans')
        ->each(sub{
            my ($i,$elem) = @_;
            $elem = $elem->html();
            $elem =~ s|</?[^<>]+>||g;
            $elem =~ s|
    ||g;
            say OUT "$elem";
        });
    
        $collinsDesc->find('.exampleLists')
        ->each(sub{
            my ($i,$elem) = @_;
            $i++;
            $elem = $elem->html();
            $elem =~ s|</?[^<>]+>||g;
            $elem =~ s|
    ||g;
            say OUT decode_entities($elem);
        });
        say STDERR "柯林斯英汉词典 OK";
    }
    
    
    # 是否有21世纪解释
    $ok = ${$desc->find("#authDictTrans")->{trees}}[0];
    if (! $ok){
        #没有这个元素
        say STDERR "没有21世纪大英汉词典";
    }else{
        # 获取21世纪大英汉词典
        say OUT "
    ##########21世纪大英汉词典##########
    ";
        my $enzh21 = $desc->find("#authDictTrans");
    
        my $ol = $enzh21->find('.ol.wordGroup');
        $ok = ${$ol->{trees}}[0];
        if(!$ok){
            say STDERR "没有";
        }else{
            $enzh21->find('.ol.wordGroup .wordGroup')->each(sub{
                my ($i,$elem) = @_;
                $elem = $elem->html();
                $elem =~ s|</[a-zA-Z]+>|
    |g;
                $elem =~ s|</?[^<>]+>||g;
                $elem =~ s|
    {2,}|
    |g;
                say OUT decode_entities("$i: $elem");
            });
            say STDERR "21世纪大英汉词典 OK";
        }
        $enzh21->find('ul .wordGroup')->each(sub {
            my ($i,$elem) = @_;
            $elem = $elem->html();
            $elem =~ s|</[a-zA-Z]+>|
    |g;
            $elem =~ s|</?[^<>]+>||g;
            $elem =~ s|
    {2,}|
    |g;
            say OUT decode_entities("$i: $elem");
        });
    }
    
    # 是否有网络解释
    $ok = ${$desc->find("#tWebTrans")->{trees}}[0];
    if (! $ok){
        #没有这个元素
        say STDERR "没有网络释义";
    }else{
        say STDERR "网络释义 OK";
        say OUT "
    ##########网络释义##########";
        #有词条
        my $web = $desc->find("#tWebTrans");
        $web->find(".wt-container .title")->each(sub {
            my ($i,$elem) = @_;
            $elem = $elem->html();
            $elem =~ s|</?[^<>]+>||g;
            $elem =~ s|
    {2,}|
    |g;
            $i++;
            say OUT decode_entities("$i: $elem");
        });
        #短语
        say OUT "
    ###短语###";
        $web->find("#webPhrase .wordGroup")->each(sub {
            my ($i,$elem) = @_;
            $elem = $elem->html();
            $elem =~ s|</?[^<>]+>||g;
            $elem =~ s|
    {2,}|
    |g;
            $i++;
            say OUT decode_entities("$i: $elem");
        });
    }
    

    效果

    
    ##########柯林斯英汉词典##########
    
    1. ADJ Someone who is abstemious avoids doing too much of something enjoyable such as eating or drinking. 有节制的 [正式]
    
    ##########21世纪大英汉词典##########
    
    0: (尤指在饮食方面)(人)有度的,有节制的,适度的
    
    1: (生活等)以节制为特点的
    
    2: (饮食等)简单而有节制的;节俭的,节省的
    
    0: adj.
    (尤指在饮食方面)(人)有度的,有节制的,适度的
    (生活等)以节制为特点的
    (饮食等)简单而有节制的;节俭的,节省的
    
    1: adj.
    2: (尤指在饮食方面)(人)有度的,有节制的,适度的
    (生活等)以节制为特点的
    (饮食等)简单而有节制的;节俭的,节省的
    
    3: (尤指在饮食方面)(人)有度的,有节制的,适度的
    
    4: (生活等)以节制为特点的
    
    5: (饮食等)简单而有节制的;节俭的,节省的
    
    
    ##########网络释义##########
    1:    有节制的
    2:    节俭的
    3:    节制的
    4:    节约的
    
    ###短语###
    1: abstemious a 有节制的 
    2: abstemious area 温带 
    3: abstemious society 节约型社会 
    4: abstemious meals 适度的吃 
    5: abstemious style 节约型 
    6: abstemious habits 节制饮食的习惯 
    7: building abstemious society 构建节约型社会 
    8: an abstemious diet 节俭的饮食 ; 饮食有度 
    9: be abstemious in drinking 节制饮酒 
    
    天和地是灰色的,砖和瓦也是灰色的。临街的墙几经风化,几经修补,刷过黑灰、白灰,涂过红漆,书写过不同内容的标语,又终于被覆盖;风雨再把覆盖层胡乱地揭下来,形成一片斑驳的杂色,融汇于灰色的笼罩之中。路旁的树木苍黑,瓦楞中芳草青青。 远处,炊烟缭绕。迷蒙的曙色中,矗立着...
  • 相关阅读:
    前端知识体系
    前端知识大总结(全)
    控制div层的显示以及隐藏
    让一个比较宽的banner位于页面中间
    数据结构之树(二)
    数据结构之树(一)
    数据结构之队列
    数据结构之栈
    数据结构之线性表(二)
    数据结构之线性表(一)
  • 原文地址:https://www.cnblogs.com/raybiolee/p/5641612.html
Copyright © 2011-2022 走看看