使用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 节制饮酒 
天和地是灰色的,砖和瓦也是灰色的。临街的墙几经风化,几经修补,刷过黑灰、白灰,涂过红漆,书写过不同内容的标语,又终于被覆盖;风雨再把覆盖层胡乱地揭下来,形成一片斑驳的杂色,融汇于灰色的笼罩之中。路旁的树木苍黑,瓦楞中芳草青青。 远处,炊烟缭绕。迷蒙的曙色中,矗立着...
原文地址:https://www.cnblogs.com/raybiolee/p/5641612.html