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不同会有不同
或者使用
但是没有网页版获取的全
所以那就提取页面文字呗
#!/usr/bin/perluse 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\n"; 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 "\n##########柯林斯英汉词典##########\n"; my $collinsDesc = $desc->find('#collinsResult')->find('.ol'); $collinsDesc->find('.collinsMajorTrans') ->each(sub{ my ($i,$elem) = @_; $elem = $elem->html(); $elem =~ s| ]+>||g; $elem =~ s|\n||g; say OUT "$elem"; }); $collinsDesc->find('.exampleLists') ->each(sub{ my ($i,$elem) = @_; $i++; $elem = $elem->html(); $elem =~ s| ]+>||g; $elem =~ s|\n||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 "\n##########21世纪大英汉词典##########\n"; 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| |\n|g; $elem =~ s| ]+>||g; $elem =~ s|\n{2,}|\n|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| |\n|g; $elem =~ s| ]+>||g; $elem =~ s|\n{2,}|\n|g; say OUT decode_entities("$i: $elem"); });}# 是否有网络解释$ok = ${$desc->find("#tWebTrans")->{trees}}[0];if (! $ok){ #没有这个元素 say STDERR "没有网络释义";}else{ say STDERR "网络释义 OK"; say OUT "\n##########网络释义##########"; #有词条 my $web = $desc->find("#tWebTrans"); $web->find(".wt-container .title")->each(sub { my ($i,$elem) = @_; $elem = $elem->html(); $elem =~ s| ]+>||g; $elem =~ s|\n{2,}|\n|g; $i++; say OUT decode_entities("$i: $elem"); }); #短语 say OUT "\n###短语###"; $web->find("#webPhrase .wordGroup")->each(sub { my ($i,$elem) = @_; $elem = $elem->html(); $elem =~ s| ]+>||g; $elem =~ s|\n{2,}|\n|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 节制饮酒