掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 15521|回复: 52

[教程] 我是这样用 python 制作词典的

    [复制链接]

该用户从未签到

发表于 2014-4-13 18:45:23 | 显示全部楼层 |阅读模式
本帖最后由 yaodis 于 2014-4-13 20:51 编辑
1 b) N, l0 @2 o7 b( O+ j* a6 b2 F+ P3 {
本文讲述了 [英-英] 适合高阶英语学习者的 Vocabulary.com Dictionary 优美发布 的制作历程# b. H9 {! f4 }$ c0 W
,希望给有意制作词典的朋友们一点借鉴) |+ J# O% i' `- ]) S* d$ i
: I; o: P3 R) z- p
关于我
3 W4 A& d6 {) G! X5 |4 L" |为了和 O大Oeasy 交换词典,半年前萌生了制作自己词典的想法,或者说,谁没有制(zhan)作(you)一部自己的词典的想法,只是面对未知心有恐惧没有行动,这次使我下定决心开始搜集信息, mdict版制作方法和常用工具 )让我对mdict词典格式是什么样的有了认识,也就是说数据有了怎么组织大概知道了,但网页数据用什么方式抓取还是不知道,抓取了用什么方法提炼排版成mdict要求的那样的格式也不知道,[索引] 【2013.11.27】词库制作中可能有用的软件、技术整理 而这个帖子中python网络爬虫一文让我决定试试学习python,会了编程,再用程序排版应该很容易吧,而我之前又听说python很容易学,于是就这么愉快的决定了  w' z! J6 E; w: J) w* I' i1 S9 U
4 |. Y* i$ p9 v% [
寒假里断断续续看了一些 regular expression 视频和python的入门书,虽然如此,开头总是难的,还是不会如何下手,第一步就不会——python到底如何批量抓取网页内容呢,3月初看到 python培训_python爬虫.flv (这个视频我觉得很好)原来是这样,便开始动工,到3月底,已经把网站下好提取成型了,又花了十多天排版CSS,终于在4月初完成了,历时一个月
, R3 U4 y2 U- y
0 T: d  Q3 O. \0 }) u( g7 D! Lpython学习
9 L  N7 F0 E1 C9 b  }7 v* M& o我主要看了三本书Hello World - Computer Programming for Kids and Other Beginners、Python for Informatics、dive into python和官方的文档,如果0基础可以从第一本看起,里面有很多章节关于GUI编程的都可以跳过,我就只看里面前几章和后面的几章,这本书让我知道了计算机都是从0开始数数的;第二本非常非常非常推荐,里面蜻蜓点水涉及了我们制作词典需要的所有东西,怎么用python下载网页,还简单介绍了regular expression怎么在python里应用,网页的数据结构XML,json都有,我这次制作这个词典里面就用到了json,因为网站就是用json储存wordfamily数据的;第三本侧重于python本身,我想如果看完了,那再去看官方文档就没问题了吧,这本书我没看完,所以官方文档我看起来很吃力,从这本书知道了if __name__ == '__main__':是什么意思,以后你会发现这很种看似有点吓人的东西python里很常见,所谓的面向对象编程,慢慢就接受了
( E: }6 E& R/ K- |6 _. t语言上这三本书都是英文的,4、6级水平读起来就没问题了,难度上,这三本书都是入门级的,但是制作词典需要掌握的基本够了
, r, Y. C' y9 e/ R) w7 n
3 j: W1 p! I$ ]4 i; {3 l% V开始实践0 J9 h$ |, F) O, m) A1 w' g
多亏了上面提到的那个视频,我迫不及待的想动手自己试试,此时这三本我现在觉得帮助很大书只看了第一本,不然的话,我还可能会按部就班的想——我先把python学的差不多再说吧,寒假里看得正则也忘的差不多了。因为这个视频一上来就实干,所以我也就干起来,边干边学,像视频里那样,分析了vocabulary.com是通过“http://www.vocabulary.com/dictionary/definition.ajax?search=”这个网址来传输词条数据的,我还得用python加个代理,不然连续下的话服务器会封我ip,视频里只教我这么多了,但发现自己下载10个单词就要1分钟多,近15万个单词全部下载完要10天10夜呢,我就想能不能快点,能不能多线程,又搜别的资料,python基础不牢,多线程看了4、5天也没头绪,主要是什么join啊,lock啊,因为线程可以多,但数据怎么保证完整XX,我放弃了,决定手工模拟多线程,把15万个单词分成了10个列表,分别运行10个程序,这样我1天就下好了
: [/ m( B1 E* ?1 S
" w5 [# ]/ W4 j) k) n( ?1 Z这期间当然还会有其他问题,比如最少得有100个代理吧(当然这么多代理是用python从代理网站抓取的)(因为有10个程序,每个得有10个代理供其随机选才够吧),这么多代理用免费的,质量肯定会参差不齐,实际上我从网上搜了一个检测的程序,结果上次运行的结果再次运行还是能发现坏链,所以,必须加上意外处理机制,我的方法是,10个代理里面如果有一个是坏的,那我1万个单词就有一千个下载失败,我把这一千个单词收集起来,再运行一次程序就只剩100个了,依此类推: {: Y; L! G6 Q# w! Z" b
8 X; ~# R! M5 K
下图就是我最终用来抓网页的程序(希望给还没接触过的人一个直观的认识,主体就只有这么多,50行不到,右边就是要下载的单词列表),代码就不贴了,我也是照葫芦画瓢,大概的意思日后懂点python了你就能看懂,也能自己写出来符合自己需求的了% K5 q3 j5 T/ O* A1 h6 `! e

" o5 P- F  {4 X+ r" F! w8 X# y
' d6 s" }7 H' ?4 E0 p1 J) q下好之后就要提取需要的内容排版成符合mdict要求的格式了,这里需要懂点html(css)和正则表达式了,html(css),我觉得这个网站就挺好 http://www.w3schools.com/,正则,网上很多教学视频。什么都不懂的时候看视频快一点,懂一点之后动手尝试学的快一点,不要指望可以什么都懂就不会急了,总之慢慢来。而python此时只要会基本的文件读写,列表,词典等数据类型就可以干活了$ J. J$ @$ l4 p0 o" [+ k8 o2 m: x" @
下图是我从下载来的数据一站式生成可以直接被MdxBuilder使用的词典原格式的代码,虽然只截了一半,但无非就是反复运用正则,然后人为的组织下运行结果的结构,我里面同样为日后的CSS排版写入了class名,当然,这都不是一次就成型的,都是要反复打磨,不然怎么能用10天搞CSS啊,特别是我这种完美主义倾向的人,要了命了7 G3 ~7 r; @9 K% b3 |/ p6 C/ B

: y* h& ^9 [# D8 H/ S
: h+ D' T7 q# I, g) k$ ?# u结语
# a; ^0 y" A. b/ X% ~7 }  P我所有的代码没有一次直接成功,都是反复修改,遇到问题、疑惑最好用英文单词罗列问题谷歌,国外的编程社区问答很健全,大部分解答很详细,我这样的新手也能看懂
& ~' _- [; T# A' N同样,作为一个新手,很多更巧妙或更省心的方法(比如python的第三方库BeautifulSoup)或风格更专业的代码我都无瑕顾及,仅凭着一点三脚猫功夫就把词典做成了,可见词典制作也不是那么遥不可及,如果你也想试试,那么利用我在 vocabulary.com 网站文本数据下载 中提供的数据,通过正则提取全部音频的链接,然后制作一部发音版的词典或许是一个不错的选择,或者省去下载的麻烦,你也可以自己尝试制作完全版本哦(而不是我那样人为的分割成两部)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

本帖被以下淘专辑推荐:

该用户从未签到

发表于 2014-4-13 20:14:26 | 显示全部楼层
0 e! z; e1 I" J
子曾经曰过:“此事非难,唯欲行之云耳。”
1 t- z, t* B( C* Z/ G祝贺楼主。

该用户从未签到

发表于 2015-11-20 21:29:56 | 显示全部楼层
学习了,自己动手,不错。

该用户从未签到

 楼主| 发表于 2014-4-13 18:47:46 | 显示全部楼层
本帖最后由 yaodis 于 2014-4-14 11:56 编辑 # ?3 }# j, H  V" c

2 z0 H4 H5 d% ]: R! {  G------- 2014-4-14 -------! M. k8 L. E  P% D& W- G; C
有人私信我制作这个网站——http://ruigo-tamatebako.jp/, C9 K+ K  [# n& c& k, f/ p+ Z( @
这种网站把词条都像博客文章那样罗列出来了0 k1 w/ @. }# _9 T. Q, W
和这个视频的抓取方法类似 Python网络爬虫实训:看我如何下载韩寒博客文章 http://edu.51cto.com/lesson/id-12393.html + p/ h$ y" z) A4 F
信中他还说到,“用迅雷下载过几十个网页,用webdump 等都下载不了”,这可能是对方的服务器封你的IP了,所以最好挂上代理,或者简单点的,python里有个函数,可以人为的让每次下载间隔一定时间,温柔点服务器就不好封ip了,但就是要慢多了
  P$ Q% ?) K' B+ N1 x6 R我说的这个函数视频里都有介绍,函数和视频本身都是入门级的,稍微学点python(一两个星期吧)就可搞懂
: _3 J4 j* y# b2 v

该用户从未签到

发表于 2014-4-13 19:02:18 | 显示全部楼层
楼主,能用teleport pro抓取网页吗?

该用户从未签到

 楼主| 发表于 2014-4-13 19:04:10 | 显示全部楼层
yingyuxx 发表于 2014-4-13 19:02
" h/ _% `, x7 z: t  [. X2 y楼主,能用teleport pro抓取网页吗?
; I! a+ x" ]" S$ M$ c
我都没听过teleport pro,你自己搜搜吧

该用户从未签到

 楼主| 发表于 2014-4-13 21:08:05 | 显示全部楼层
Oeasy 发表于 2014-4-13 20:14 & d5 i+ s6 ?1 V! `% Y! M2 e. r
子曾经曰过:“此事非难,唯欲行之云耳。”8 \! x4 D" f: ]
祝贺楼主。
% u* H3 c0 x. [; Z, b% I. X
还要感谢O大啊,算是我半个师傅了
  • TA的每日心情
    难过
    2018-3-28 11:32
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2014-4-13 21:47:50 | 显示全部楼层
    支持楼主,很好的经验。
  • TA的每日心情
    开心
    2018-1-27 00:16
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-4-13 23:26:50 来自手机 | 显示全部楼层
    无限感谢楼主!
    - S2 @$ M6 T: n; g" M谢谢您的心血!

    该用户从未签到

     楼主| 发表于 2014-4-14 13:40:40 | 显示全部楼层
    tsiank 发表于 2014-4-14 13:22
    - Z7 z& G" ]0 u2 K0 [你好,可不可以帮我提取一下这个网站http://www.eastling.org/OC/oldage.aspx的数据?

    - J4 a7 j7 c  w9 ]+ X亲,方法我都说了

    点评

    不會phython,現在也沒有時間學這些。  发表于 2014-4-14 14:10

    该用户从未签到

    发表于 2014-4-14 18:48:03 | 显示全部楼层
    本帖最后由 Oeasy 于 2014-4-14 18:49 编辑 . s4 {$ \: {7 V
    tsiank 发表于 2014-4-14 13:22 2 Z3 u7 A$ X0 N& M2 u' G9 m0 O. r# G
    你好,可不可以帮我提取一下这个网站http://www.eastling.org/OC/oldage.aspx的数据?

    : V& R( l; P0 [0 ?9 ?% O7 s  V% D8 t: r; |. ?$ a0 V% w5 `
    这网站很高大上啊,抓取不易,不如直接和站长联系,看是否能够获取。
    : T1 L- T& q; ]& e0 E7 K3 @7 D( v. s, i6 Z
    另蓝海兄可以看看这个
    * ?$ ]) S* h( |% F4 khttp://att.k.newsmth.net/bbstcon ... stics&gid=750761 ]7 v& e/ K/ r+ b) X8 B8 @
    http://www.guokr.com/post/577961/
    8 E4 m0 P+ m8 t) m4 R2 L/ N
      g9 p  l& G8 n0 V2 U7 T6 j1 Q. }6 U

    : S. O$ p& ]; C7 l# P/ e% V
    5 b: ~4 {) `+ Q& l; d4 C9 n
    + p! g9 @6 s' ?$ n
    也可以和作者Maigo联系。

    该用户从未签到

    发表于 2014-4-15 09:12:12 | 显示全部楼层
    Oeasy 发表于 2014-4-14 18:48 ; N  J7 \+ x9 k6 Q* a
    这网站很高大上啊,抓取不易,不如直接和站长联系,看是否能够获取。, U+ a4 f' ^/ B% m; f
    : R' `6 s0 f4 S2 c6 K$ D
    另蓝海兄可以看看这个

    , `) }: l0 Z0 I* y" c6 p我曾用WebZIP 7这个软件试过,可是抓取不到内容。联系站长肯定是不行的,呵呵。中古音查询的,我早就自己做成了,其实这个上古音的,我也已经有了完整的一家了,现在只是想把这些数据下下来做个系统的对比。看来我只能手动一个个查询复制粘贴了。
  • TA的每日心情
    开心
    2020-1-12 17:47
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2014-4-16 19:57:49 | 显示全部楼层
    sublime?

    该用户从未签到

     楼主| 发表于 2014-4-16 21:56:57 | 显示全部楼层
    perhapz 发表于 2014-4-16 19:57
    / u; z1 X. p! m$ u. ssublime?

    9 r% V( A# M# B对,但是这个软件打开300mb+的文档还是会卡

    该用户从未签到

    发表于 2014-4-17 00:54:41 | 显示全部楼层
    楼主真强   发词典又传授经验  我们这些菜鸟真该好好学习学习了
  • TA的每日心情
    奋斗
    2022-7-18 17:14
  • 签到天数: 413 天

    [LV.9]以坛为家II

    发表于 2014-4-18 22:13:44 | 显示全部楼层
    好辛苦啊,楼主更伟大

    该用户从未签到

    发表于 2014-4-22 01:12:34 | 显示全部楼层
    感谢楼主
  • TA的每日心情

    2022-1-3 20:06
  • 签到天数: 384 天

    [LV.9]以坛为家II

    发表于 2014-7-19 21:08:31 | 显示全部楼层
    楼主,像我这样的文科生学python着实不易。我都看了3天的python书了,看不懂你用的是什么工具啊。我只会打开python的IDLE...能否告诉我要用什么工具抓取。是用python的什么模块?谢谢

    该用户从未签到

    发表于 2014-7-20 01:24:13 | 显示全部楼层
    标记学习做字典 啊
  • TA的每日心情
    开心
    2023-1-26 08:09
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2014-8-17 18:35:59 | 显示全部楼层
    感谢前辈指引...
  • TA的每日心情

    2021-3-7 08:57
  • 签到天数: 279 天

    [LV.8]以坛为家I

    发表于 2014-10-18 19:47:33 | 显示全部楼层
    这个帖子太励志了。零基础居然可以学成PYTHON并抓下来词典。非常感谢楼主分享经验\(΄◉◞౪◟◉`)/

    该用户从未签到

    发表于 2015-10-13 00:26:28 | 显示全部楼层
    这让人汗颜啊~

    该用户从未签到

    发表于 2015-10-19 23:36:06 | 显示全部楼层
    请教一下:没有接触过Python的,想学Python, 用哪个版本比较好?

    该用户从未签到

    发表于 2015-10-22 15:35:49 | 显示全部楼层
    收藏了,这个是在是太有用了

    该用户从未签到

    发表于 2015-10-23 06:35:45 | 显示全部楼层
    除了佩服我还能说什么呢?制作词典的又一个渠道
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2025-4-7 08:11 , Processed in 0.026268 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表