|
本帖最后由 Oeasy 于 2013-11-17 09:54 编辑
`- c" r3 H4 j% z9 l1 T3 @6 b Y5 x+ m& h" M
0 b- Q. _0 e* y! X: E5 ~一个简单得不能再简单的网页抓取然后制作mdx教程(20131114)
, B& v& ]( {! C4 R. S0 U. P; O. ^4 u8 ?8 R- ^/ G
使用软件
; q+ r- g0 U" K0. 操作系统:Windows 7 旗舰版64位7 P3 q; y8 k9 J ^) e, N
1. 抓取工具:wget,http://users.ugent.be/~bpuype/wget/,http://baike.baidu.com/view/1312507.htm
( l4 A; ~" u& Q; G- G2. 文本处理:EditPlus, UltraEdit, TextForever(http://www.comicer.com/stronghorse/software/index.htm#TextForever)
& v- l c0 J) l5 h- F' t' B: K2 \3 ]7 l8 O4 o" j: A8 f
目标词典; [2 d$ _6 Z3 `# ?; w. M
Dictionary of Phrase and Fable,1894: http://www.infoplease.com/dictionary/brewers/ 这词典是公版的,而且网站没有设置抓取限制(至少目前看来没有设置),获取index也非常容易,故以此为例。
1 h5 s( a& O" A K$ c4 z另:有个pdf http://pan.baidu.com/share/link?shareid=267207&uk=2063908536,版本不详,似乎是第17版的。! ?/ U! r9 O3 e9 G
6 W8 O. W; B1 F4 k9 j9 D* v操作步骤
; N: t' [/ F9 h9 ^. x% A; x1. 获取index
+ h5 p9 }5 C3 O( `观察http://www.infoplease.com/dictionary/brewers/,该网站本身可以browse整本词典,获取index非常容易。
9 }: o. ^8 I$ E8 \( ?5 n' n新建一个txt,内容为
8 j0 y% v, ^+ d2 Q9 o! i( u/ I+ Q% f z
这些地址都是观察上面网站而得,txt命名为download.txt。2 z+ F* K% w& y' }8 X
我把这个download.txt和wget.exe(如果你下载的wget是wget+版本号.exe,不妨重命名为wget.exe),这俩文件都放在D:\DOPF下。! V e7 l3 ]4 f; X0 Y
% _# r+ E# `, P6 i& Z* _4 v! zcmd.exe->CD/D D:\DOPF->wget -i download.txt
. L8 Q* v6 F$ f6 \( c7 R& i6 \1 w! o
很快,26个html文件就下下来了,对这26个html文件进行整理,得到
/ D: h' _1 a% U0 B; y* W8 s3 ^0 a5 F9 U! C
这样的一共16698个链接。, _' Q( z. s2 o* {4 N
% R. K- m* L5 `: ?5 o0 v2. 抓取内容
& s h* u; b3 m4 H% X同样的,wget -i download.txt4 [2 [, _$ p" @' A4 i6 H
把上面那N个html都抓下来,然后就很简单了。6 X3 u# l& z$ F. B$ G% D
-2013年11月14日 16:35:474 h; a8 i! Z1 p/ m9 o' G5 U
成功抓取了16695个html,漏了3个,懒得研究到底是哪3个了。
* k' K2 v. ~# H# S. m2 c
" U+ w* Q+ ^ Y+ c, r# O3. 文本提取
1 v* N) A7 d# A0 L- W. R; S) F) Q. R观察可知,词典条目内容在第一个<h1>和<div class="source">之间& n4 h3 ^& K9 b1 ~% A! D2 m
<h1>Charybdis</h1>* b' e: }7 {5 d4 x( J
7 |3 _# w0 j5 n! \1 a6 X
<p> [ch=k]. A whirlpool on the coast of Sicily. Scylla and; |" ]% o% Q/ r, _* N0 s
Charybdis are employed to signify two equal dangers. Thus Horace says
9 x6 l. Y1 w' F2 y7 a: _an author trying to avoid Scylla, drifts into Charybdis,<em> i.e.</em>
4 L% j# X8 c3 j4 p! nseeking to avoid one fault, falls into another. The tale is that h/ x: D* d6 y, c- s% c; Q
Charybdis stole the oxen of Hercules, was killed by lightning, and# M$ X3 [# Q2 J6 @
changed into the gulf.</p>
) z3 h( e/ H. o J* o- f, |- R) [<p>“Thus when I shun Scylla, your father, I fall into Charybdis, your# N: R' q4 [7 m% c. U
mother.” —<cite>Shakespeare: Merchant of Venice,</cite> iii. 5.) V' \$ g! _+ |- B. C5 r
</p>& ?; _, x5 A( K/ `- }. Y/ `
( _9 m Z u, O+ Z8 y: e& J
<div class="source">Source: <cite>Dictionary of Phrase and Fable</cite>, E. Cobham Brewer, 1894</div>
' R( K. l5 x/ g, o' \" T) [利用TextForever来提取文本5 [, w3 h. S" J/ G" c3 G
' H4 F* q% @$ h3 D. k& w
-
2 s2 r: I9 `) [# Y- |: k3 w. I. k- R1 T% Z# @- Y5 `
提取完毕,合并得到的16695个html,
% u/ m$ U7 E0 \ R
- y& E' {# J; @8 e- ]: r0 C: O这本词典的制作过程中,我思考了下,不用在“文件内容前加注文件名”,有的情况下,是需要这样做的,以方便提取keywords,经过测试,还是要在“文件内容后加空行”。' V. p6 G" k$ i8 I4 U
! v- Y7 }* ]; s4 i得到dopf-src.txt,对这个txt进行操作,得到可build为mdx的txt。* `1 c) G& X3 {* j
* p* ]. n n1 m
4. 制作mdx$ }2 n, q& @+ Q- g
合并后的文本长这样:
( t4 l0 p' C( O. U3 A9 B4 H0 M- Z7 g9 A+ |# j4 b
1 E u4 X! F1 K) ^0 I* N5 x明显http://www.infoplease.com/dictionary/brewers/的词典是xml,由于MDict PC版不支持xml+css,我们要把xml标签替换为html标签。经过下面一系列的操作。6 w" [. O* P+ P# [# E _* @6 m
/ ^; F5 q9 X) }# g0 y
: G% u {/ y) @ Y8 s处理后最终的文本是这样:
; P b, @. K" a! D
6 B; O9 x4 g0 ^( e+ X' ^ o% p! J$ T( h( w7 N! E6 e% [% d7 k: y, k) w
再简单写点css" Y* Q! z C" m9 _6 O& |
- q/ P2 B' y6 k5 ^: ~9 F( P2 s! [& ?, N! v& I: z4 N$ D
中途遇到些小问题,一个个解决,最后,成品:
) \" D. j2 B U$ j+ o
# d! T7 P! i O+ w |# v& J是不是比在线的稍微顺眼点呢?7 x+ w' a8 E% A: M# ~/ {+ h# m
http://www.infoplease.com/dictionary/brewers/comb.html/ f6 x1 ^4 f9 L' b" b$ m1 O# H
5 E/ a# Y$ w9 J7 R1 m
" V3 ]8 c) C. P( o% k$ ~
PS:虽然做完了,但是我发现了一些问题,从上面的截图中就可以看出来,有些词之间少了空格。暂无意修改,等有空改完了再分享。谁有兴趣改一改练练手的话,可以PM我,我把下载的网页发给你。; A4 l+ B1 H* Q8 B
|
|