|
本帖最后由 惟吾无为 于 2012-6-11 07:37 编辑
成品问世: https://pdawiki.com/forum/thread-9349-1-1.html
离线 百度 百科 百度百科 纯文本 百度百科纯文本 百度百科2012纯文本 百度百科2012 离线百度百科 离线百度百科2012 百度百科2012下载 百度百科纯文本下载 百度百科下载 百度百科纯文本离线 百度百科离线
-------------------------
首先说明, 我只是给想做的人指一个方向, 我不会参与制作. 因为我不需要.
其次, 你需要学习linux知识, 因为我不会windows, 我在windows下用cygwin来使用linux命令.
学习一个新事物是有难度的, 尤其是从图形界面转向命令行, 从windows转向linux, 所以毅力很重要.
如果你没有足够的理由去掌握这门新知识, 建议不要去学linux. 因为你没必要花那么多精力.
记住, 会google很重要. 看完教程也很重要.
一直有人想制作离线的百度百科, 可惜工程量太大. 最终不了了之.
我提供一个思路. 自认为会轻松些. 在linux下处理效率最高. windows(使用cygwin模拟linux)下效率不高.
方法分为两大步: 下载和处理.
下载使用wget, 一个强大高效且轻巧的下载工具, linux默认安装. cygwin需要自己安装.
百度百科的链接为递增的数字. 所以免去解析链接的麻烦.
这里以1000个页面为一个处理单位.
1.1 生成供wget使用的url列表.
使用列表文件的话, 效率会高很多. 如果wget每次只下一个文件, 则会频繁fork进程及建立链接. 无法达到最佳效率.
以每1000个文件为一个单位进行下载, 如果内存足够, 可以设置大些, 因为下载的内容都会保存在内存.
这是bash脚本. wget.lst为我自定义的url列表文件.
- for i in {1..999}
- do
- echo "http://baike.baidu.com/view/$i.htm"
- done > wget.lst
复制代码 1.2 wget下载.
如果在linux下, 推荐先进入/dev/shm目录. 或者加上-P /dev/shm来指定目录前缀.
这样所有内容就会保存在内存, 读写速度很很快. 再说也是临时文件, 处理完后就可以丢弃的. 节省速度的同时也保护了硬盘.
cygwin无法做到. 所以效率因此而低.
保存在当前目录下的view目录里. 会自动创建view目录, 当然你也可以自定义.
# -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正在下东西, 所以速度可能慢了点.
在每一个单位的页面下载完成后. 就可以处理了.
至于怎么处理, 就是看你怎么想了, 你可以只提取出正文, 把正文留待日后处理.
或者直接一次处理完, 输出纯文本, 或者重新排版的html, 或者直接输出原来的正文.
记得处理下那些不存在的页面.
如果你想便于更新的话, 可以计算文件的md5值及文件字节数(或许只靠这个就行了). 日后对比文件大小或md5值来决定是否需要处理.
如果要做md5sum表, 强烈建议使用linux. 因为读内存里的文件会很快. 尤其文件多的时候.
如果只记录大小的话, wget有个--spider选项很好, 只获取文件信息, 而不下载文件, 把输出的日志在本地解析, 只下载大小改变的文件, 很方便.
推荐使用awk处理, sed也行, 但会难学些. 其实bash也行, 不过太慢了.
这个一时半会也讲不完, 所以不讲了, 有兴趣的可以使用google搜索相关的教程.
推荐把处理后的结果也先放在/dev/shm里的某个目录, 处理完毕后, 把目录打包压缩再写入硬盘. 速度会快些.
此时可以删除之前下载的页面了, 重新下载下一个单位的页面.
最后, 希望那些经常进行文本处理的人能够了解下linux, 一旦掌握, 你可以省去很多查找替换的时间.
别以为命令行很可怕, 体会到她的简洁高效之后, 你会无法自拔. 我很庆幸我会linux. 也希望你也会linux.
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的内容.
至于linux的教程, 你只需要知道google知道那些东西的位置即可.
至于学习过程遇到的问题, 你只需要知道google知道答案即可.
学习bash, 推荐abs, 中文版3.9.1, 学习awk, 推荐sed和awk第三版. 最后找本命令大全吧, 经常看看, 了解下各命令的作用. 有事半功倍之效. grep是找文件内容的, 用的巧也是个不错的文本处理工具.
iconv转换文本编码. linux默认使用utf-8, windows使用cp936.
二者换行符也不同, 使用dos2unix命令处理.
最后再废话一遍, 先看下命令大全. 大概了解下各命令的用途. |
评分
-
1
查看全部评分
-
|