|
本帖最后由 惟吾无为 于 2012-6-11 07:37 编辑
$ q; h) d2 u1 }5 k, a2 c+ }$ n& q+ p- q! j% K
成品问世: https://pdawiki.com/forum/thread-9349-1-1.html; H' \( Q7 K8 c# f. Q
离线 百度 百科 百度百科 纯文本 百度百科纯文本 百度百科2012纯文本 百度百科2012 离线百度百科 离线百度百科2012 百度百科2012下载 百度百科纯文本下载 百度百科下载 百度百科纯文本离线 百度百科离线
|7 T+ @9 K, ]7 }0 D0 @' G
3 w! D, U: e) ~5 m-------------------------. u* u, J9 }) G$ B7 E6 ^2 ~: N
. Q8 h5 z% q$ w- j' {: m$ X( n* S$ D" Y: [+ V' @ M: o
首先说明, 我只是给想做的人指一个方向, 我不会参与制作. 因为我不需要.
- B, h3 B. `3 F, G! H其次, 你需要学习linux知识, 因为我不会windows, 我在windows下用cygwin来使用linux命令.# }& G* f5 z" W4 b/ a
学习一个新事物是有难度的, 尤其是从图形界面转向命令行, 从windows转向linux, 所以毅力很重要.
/ d5 K6 @% Z$ v, O' I2 N4 ?如果你没有足够的理由去掌握这门新知识, 建议不要去学linux. 因为你没必要花那么多精力., M5 J: C7 N4 T$ ], I
记住, 会google很重要. 看完教程也很重要.; W, Z" L3 \3 g; w& L* K* d- t
一直有人想制作离线的百度百科, 可惜工程量太大. 最终不了了之.: ]: j. Q# Z1 _: z7 v! D @
! ~' v2 E! ?0 c+ x! J$ y% S
我提供一个思路. 自认为会轻松些. 在linux下处理效率最高. windows(使用cygwin模拟linux)下效率不高. : n$ S( b# I% ?3 X+ B/ `
& T1 ]( N: U% o; v5 B% ~& ^/ h2 Q方法分为两大步: 下载和处理. ( _" J \+ j/ u+ S7 d$ h: S9 ?
$ T( d2 v) @4 q下载使用wget, 一个强大高效且轻巧的下载工具, linux默认安装. cygwin需要自己安装.
! n, ]# Z' L6 _! |, S; m8 q- m百度百科的链接为递增的数字. 所以免去解析链接的麻烦. # ]( P q# F9 ?' _! E" f- n
3 C0 r; K( i- c* v3 @8 s
这里以1000个页面为一个处理单位.8 z3 X% o* c$ J. H
% H, F% W- y0 C9 N1.1 生成供wget使用的url列表. * X" j$ \: i7 B- A0 G0 h$ N H- o) B
使用列表文件的话, 效率会高很多. 如果wget每次只下一个文件, 则会频繁fork进程及建立链接. 无法达到最佳效率.0 `; k! e3 ]% F
以每1000个文件为一个单位进行下载, 如果内存足够, 可以设置大些, 因为下载的内容都会保存在内存.
% i0 k" ~, h! g3 G这是bash脚本. wget.lst为我自定义的url列表文件.- 6 ]( u$ v: G9 G$ O' h' x2 u' \
- for i in {1..999}
8 ?" Y4 P; c! f# {( ]8 E3 M - do
$ {3 u: c5 t; ~8 u8 H6 |; E - echo "http://baike.baidu.com/view/$i.htm"0 E+ |% [) A. f( R; i2 c
- done > wget.lst
& B/ w" l, r" |. Q, m! y+ ]( W
复制代码 1.2 wget下载.; H. z' K4 q6 P& j0 ~" @
如果在linux下, 推荐先进入/dev/shm目录. 或者加上-P /dev/shm来指定目录前缀.
+ r+ H% p1 P$ j& v* ^0 A. }这样所有内容就会保存在内存, 读写速度很很快. 再说也是临时文件, 处理完后就可以丢弃的. 节省速度的同时也保护了硬盘.
& G. n$ }4 N4 J1 R+ ?% {& |cygwin无法做到. 所以效率因此而低.& r6 q$ g9 n0 d$ {( U7 M
保存在当前目录下的view目录里. 会自动创建view目录, 当然你也可以自定义.+ w, l/ b2 k* P$ A2 j! M0 k1 i# g
# -i url列表 -o 日志文件 -w 下载间隔 --random-wait 0.5~1.5倍随机下载间隔 -x 强制创建目录 -nH 不创建主机名目录- wget -c -i wget.lst -o wget.log -w 0.5 --random-wait -x -nH
复制代码 我测试了下. 673个文件占用了32.4M硬盘空间. 时间18:36-18:54, 4M网速, 但是另一个wget正在下东西, 所以速度可能慢了点.
) c6 s1 w5 R- X- Q% u ^/ p在每一个单位的页面下载完成后. 就可以处理了.* P3 }- T2 k" z2 H
; w# J8 g5 |9 i% G; _, I* ]至于怎么处理, 就是看你怎么想了, 你可以只提取出正文, 把正文留待日后处理.
: y' R G7 @' n' N或者直接一次处理完, 输出纯文本, 或者重新排版的html, 或者直接输出原来的正文.
; Q: }% b! S! B d( `& l记得处理下那些不存在的页面.
1 X8 ] o7 @2 p& @/ I+ B; ~
K5 R+ u& d& ?9 D/ m, a) Y如果你想便于更新的话, 可以计算文件的md5值及文件字节数(或许只靠这个就行了). 日后对比文件大小或md5值来决定是否需要处理.
7 @, E- e1 X. @% y' l如果要做md5sum表, 强烈建议使用linux. 因为读内存里的文件会很快. 尤其文件多的时候.( p8 |5 @: @+ F& X" X
如果只记录大小的话, wget有个--spider选项很好, 只获取文件信息, 而不下载文件, 把输出的日志在本地解析, 只下载大小改变的文件, 很方便.
3 C/ |6 Z+ o9 E, O! W2 O0 x
% ^: J' Y }. {! @6 b5 M& E* g( e
推荐使用awk处理, sed也行, 但会难学些. 其实bash也行, 不过太慢了.
( T+ V4 D% ^5 e# S5 s 这个一时半会也讲不完, 所以不讲了, 有兴趣的可以使用google搜索相关的教程." o3 N5 q, w' P$ S. {. ?0 l
, `/ j" @% t( s4 }7 D
推荐把处理后的结果也先放在/dev/shm里的某个目录, 处理完毕后, 把目录打包压缩再写入硬盘. 速度会快些.
# y5 V# i& v/ D此时可以删除之前下载的页面了, 重新下载下一个单位的页面.$ e# H; F+ p7 q& [( c6 G& W
" e- T" e7 z& u, T) y最后, 希望那些经常进行文本处理的人能够了解下linux, 一旦掌握, 你可以省去很多查找替换的时间.
. l# p5 I6 j3 m2 q' y' u M别以为命令行很可怕, 体会到她的简洁高效之后, 你会无法自拔. 我很庆幸我会linux. 也希望你也会linux.9 t0 a/ t2 W( [: P& j# t
6月份我就会把主机系统换成linux(ubuntu 12.04), 目前是xp+ubuntu 10.04. 另一个wget下载的就是ubuntu 12.04的软件包. 由于电信的校园E信必须在windows下使用, 加之其他原因, 我决定断网. 所以着手制作本地源. 估计明天或后天就能全部下载完了. 从上周日下午开始. 目前已经下载了超过20,000个文件. 大约13.3+1.2+3.4+0.1+15.0G的内容, 还剩下1.5万个文件, 估计12G的内容.
+ Q- E, h ~6 E3 ?% G0 o a
# P q6 ~# a; O8 b1 P) Y+ I至于linux的教程, 你只需要知道google知道那些东西的位置即可. & p. u' s0 f# Z Z4 O- Y
至于学习过程遇到的问题, 你只需要知道google知道答案即可.
) ^- z8 a6 ]# \, e" D8 ~$ L学习bash, 推荐abs, 中文版3.9.1, 学习awk, 推荐sed和awk第三版. 最后找本命令大全吧, 经常看看, 了解下各命令的作用. 有事半功倍之效. grep是找文件内容的, 用的巧也是个不错的文本处理工具.1 ~- c. g; W; `( B2 P* k: |, r
iconv转换文本编码. linux默认使用utf-8, windows使用cp936.
0 u8 ^8 A3 o H9 { A+ C' g$ g二者换行符也不同, 使用dos2unix命令处理.
' k! R; b O S. a最后再废话一遍, 先看下命令大全. 大概了解下各命令的用途. |
评分
-
1
查看全部评分
-
|