查看: 3455|回复: 4
打印 上一主题 下一主题

[教程] 制作Dictionary of Phrase and Fable, E. Cobham Brewer, 1894

[复制链接]

该用户从未签到

2121

主题

2961

回帖

6万

积分

翰林院修撰

不忘初心。送分大人,灌水砖家。擅长抛砖引玉,挖坑不填。

Rank: 12Rank: 12Rank: 12

积分
61056

翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

跳转到指定楼层
1
发表于 2013-11-14 08:24:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Oeasy 于 2013-11-17 09:54 编辑


一个简单得不能再简单的网页抓取然后制作mdx教程(20131114)

使用软件
0. 操作系统:Windows 7 旗舰版64位
1. 抓取工具:wget,http://users.ugent.be/~bpuype/wget/http://baike.baidu.com/view/1312507.htm
2. 文本处理:EditPlus, UltraEdit, TextForever(http://www.comicer.com/stronghorse/software/index.htm#TextForever

目标词典
Dictionary of Phrase and Fable,1894: http://www.infoplease.com/dictionary/brewers/ 这词典是公版的,而且网站没有设置抓取限制(至少目前看来没有设置),获取index也非常容易,故以此为例。
另:有个pdf http://pan.baidu.com/share/link?shareid=267207&uk=2063908536,版本不详,似乎是第17版的。

操作步骤
1. 获取index
观察http://www.infoplease.com/dictionary/brewers/,该网站本身可以browse整本词典,获取index非常容易。
新建一个txt,内容为
http://www.infoplease.com/dictionary/brewers/index-a.html
http://www.infoplease.com/dictionary/brewers/index-b.html
http://www.infoplease.com/dictionary/brewers/index-c.html
http://www.infoplease.com/dictionary/brewers/index-d.html
http://www.infoplease.com/dictionary/brewers/index-e.html
http://www.infoplease.com/dictionary/brewers/index-f.html
http://www.infoplease.com/dictionary/brewers/index-g.html
http://www.infoplease.com/dictionary/brewers/index-h.html
http://www.infoplease.com/dictionary/brewers/index-i.html
http://www.infoplease.com/dictionary/brewers/index-j.html
http://www.infoplease.com/dictionary/brewers/index-k.html
http://www.infoplease.com/dictionary/brewers/index-l.html
http://www.infoplease.com/dictionary/brewers/index-m.html
http://www.infoplease.com/dictionary/brewers/index-n.html
http://www.infoplease.com/dictionary/brewers/index-o.html
http://www.infoplease.com/dictionary/brewers/index-p.html
http://www.infoplease.com/dictionary/brewers/index-q.html
http://www.infoplease.com/dictionary/brewers/index-r.html
http://www.infoplease.com/dictionary/brewers/index-s.html
http://www.infoplease.com/dictionary/brewers/index-t.html
http://www.infoplease.com/dictionary/brewers/index-u.html
http://www.infoplease.com/dictionary/brewers/index-v.html
http://www.infoplease.com/dictionary/brewers/index-w.html
http://www.infoplease.com/dictionary/brewers/index-x.html
http://www.infoplease.com/dictionary/brewers/index-y.html
http://www.infoplease.com/dictionary/brewers/index-z.html

这些地址都是观察上面网站而得,txt命名为download.txt。
我把这个download.txt和wget.exe(如果你下载的wget是wget+版本号.exe,不妨重命名为wget.exe),这俩文件都放在D:\DOPF下。

cmd.exe->CD/D D:\DOPF->wget -i download.txt

很快,26个html文件就下下来了,对这26个html文件进行整理,得到

这样的一共16698个链接。

2. 抓取内容
同样的,wget -i download.txt
把上面那N个html都抓下来,然后就很简单了。
-2013年11月14日 16:35:47
成功抓取了16695个html,漏了3个,懒得研究到底是哪3个了。

3. 文本提取
观察可知,词典条目内容在第一个<h1>和<div class="source">之间
<h1>Charybdis</h1>

<p> [ch=k]. A whirlpool on the coast of Sicily. Scylla and
Charybdis are employed to signify two equal dangers. Thus Horace says
an author trying to avoid Scylla, drifts into Charybdis,<em> i.e.</em>
seeking to avoid one fault, falls into another. The tale is that
Charybdis stole the oxen of Hercules, was killed by lightning, and
changed into the gulf.</p>
<p>“Thus when I shun Scylla, your father, I fall into Charybdis, your
mother.” —<cite>Shakespeare: Merchant of Venice,</cite> iii. 5.
</p>

<div class="source">Source: <cite>Dictionary of Phrase and Fable</cite>, E. Cobham Brewer, 1894</div>

利用TextForever来提取文本

-

提取完毕,合并得到的16695个html,

这本词典的制作过程中,我思考了下,不用在“文件内容前加注文件名”,有的情况下,是需要这样做的,以方便提取keywords,经过测试,还是要在“文件内容后加空行”。

得到dopf-src.txt,对这个txt进行操作,得到可build为mdx的txt。

4. 制作mdx
合并后的文本长这样:


明显http://www.infoplease.com/dictionary/brewers/的词典是xml,由于MDict PC版不支持xml+css,我们要把xml标签替换为html标签。经过下面一系列的操作。


处理后最终的文本是这样:


再简单写点css


中途遇到些小问题,一个个解决,最后,成品:

是不是比在线的稍微顺眼点呢?
http://www.infoplease.com/dictionary/brewers/comb.html


PS:虽然做完了,但是我发现了一些问题,从上面的截图中就可以看出来,有些词之间少了空格。暂无意修改,等有空改完了再分享。谁有兴趣改一改练练手的话,可以PM我,我把下载的网页发给你。

本帖被以下淘专辑推荐:

该用户从未签到

38

主题

655

回帖

7509

积分

翰林院编修

Rank: 11Rank: 11Rank: 11Rank: 11

积分
7509

翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

2
发表于 2013-11-14 16:26:41 | 只看该作者
此贴要顶!
  • TA的每日心情
    开心
    2018-1-27 00:16
  • 签到天数: 1 天

    [LV.1]初来乍到

    99

    主题

    1477

    回帖

    3万

    积分

    翰林院孔目

    Rank: 10Rank: 10Rank: 10

    积分
    35504

    灌水大神章小蜜蜂章笑傲江湖章翰林院专用章管理组专用章

    3
    发表于 2013-11-15 23:30:45 来自手机 | 只看该作者
    老大您好。感谢您提供的教程。
    小弟按照您的教程,把第一步完成了,但是如何有效地完成第二步,就是您所说的抓取一千多个网页的那个步骤,小弟一头雾水,手动一个一个地输入也是一个方法,不过效率不高。不知道老大是否有批量获得每个单词网页的方法呢?烦请指点一二,多谢多谢。

    小弟想抓取的网页如下:
    http://zokugo-dict.com/

    右边的五十音图就是索引部分。

    该用户从未签到

    2121

    主题

    2961

    回帖

    6万

    积分

    翰林院修撰

    不忘初心。送分大人,灌水砖家。擅长抛砖引玉,挖坑不填。

    Rank: 12Rank: 12Rank: 12

    积分
    61056

    翰林院专用章灌水大神章笑傲江湖章小蜜蜂章管理组专用章

    4
     楼主| 发表于 2013-11-16 14:14:53 | 只看该作者
    liuyunrushui 发表于 2013-11-15 23:30
    老大您好。感谢您提供的教程。
    小弟按照您的教程,把第一步完成了,但是如何有效地完成第二步,就是您所说 ...


    cmd.exe

    wget -i download.txt
    所有网页链接在download.txt,参考http://baike.baidu.com/view/1312507.htm,也可以自己写程序抓。结合awk等等的话,其实可以更快,抓完也就制作完了。

    该用户从未签到

    14

    主题

    209

    回帖

    -1万

    积分

    禁止发言

    积分
    -10022
    5
    发表于 2014-4-1 09:02:21 | 只看该作者
    thank you very much