掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1753|回复: 20

[工具] 又一个百度百科制作工具。

[复制链接]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    发表于 2008-10-15 16:22:39 | 显示全部楼层 |阅读模式
    如果不想要图片和链接的可以用我瞎写的ruby脚本。:lol . }! v: b" t0 c, T
    max代表最大号,min是最小, 从1开始,每天想处理多少就处理多少,也可以放到服务器上全部处理成一个文件。- R$ O& s2 V& |) c2 x  ~
    低网速情况的代码
    1. require 'rubygems'
      ( o7 h* X! }" u" [- n) ~9 v
    2. require 'hpricot'
      ; o) S/ |8 }- l- F6 `2 S
    3. require 'open-uri'
      4 u* U/ _6 l3 @* A% V7 Z- y, g3 U
    4. max=200
      8 m% X% E9 C& Q9 B7 I2 T
    5. min=11 y, W8 e5 ~$ @$ Q, f( {
    6. dic=File.open("baidudic#{min}-#{max}.txt","a")
      # P3 q' j: M3 R# y+ u3 j
    7. while min<max+1 do
      $ n% B; X* ]: J9 e; [  Z, o# y( x
    8. url = "http://baike.baidu.com/view/#{min}.htm"
      3 [. e$ M: ?& S* G' \
    9. puts "#{url}"
      $ x6 s9 G* v' p4 t* ~. H0 a) L
    10. doc= Hpricot(open(url))1 J2 Y" U# X. [
    11. title0= (doc/:title).inner_html
      & O4 w& [1 q+ j0 P; Z8 f
    12. title=title0.split('_')% K3 y; F! b6 g, w
    13. content= (doc/"#lemmaContent").inner_html
      ( }+ Q$ F1 @0 O* S9 q
    14. temp=content.gsub(/<\/?[^>]*>/, "")* k" W: Q+ }5 @/ O
    15. temp=temp.gsub(/编辑本段/, "")# q# [" m2 a9 r' I  z
    16. dic.puts title[0]
      ' N/ k: \8 D; T3 v3 Q; J
    17. dic.puts "原文链接:#{url}"& o* t% Y  W$ F- \
    18. dic.puts temp
      1 Z' N9 l) n( A* b. y- g
    19. dic.puts "</>"
      1 x1 c6 w1 c3 B/ {/ T7 Z+ I5 P
    20. puts "OK"
      ) h* Q+ R+ o+ q
    21. min=min+1
      , a$ `1 w; ?3 D- N( ]5 ^" ]
    22. end7 x6 r" c8 N7 A5 }
    23. dic.close0 G, Y/ E+ @" U
    复制代码
    高网速情况的代码

    1. 0 B  N9 c# z( H$ P, }
    2. # baidubaike 2 mdict by daming
      % A* y5 _  g2 U8 G5 T
    3. # [email protected]
      1 {/ ?$ o2 a( k1 x' }% R
    4. require 'rubygems') T, r7 s4 J4 W9 g
    5. require 'hpricot'
      ' C( D3 k, _* R; A& V6 z
    6. require 'pathname'
      $ W: S8 W4 i9 }3 P
    7. require 'fileutils'
      4 a" C/ y2 y, t  O
    8. require 'open-uri'4 c1 P. c! a/ Y, l% z- g/ K
    9. Maxn=20
      1 P& C3 V/ y* s! `+ F+ o6 X# B
    10. max=100
      6 s* f4 }4 B* @7 v
    11. min=1( b+ q" }; l. u: w1 p. T! o$ X  @
    12. dic=File.open("baidudic#{min}-#{Maxn*max}.txt","a")1 `' V  v  A) n4 I
    13. for j in 0..(Maxn-1) do
        K9 R: Y0 R1 q! }7 C
    14. FileUtils.makedirs("temp")
      ' J: \9 B: H/ I  i$ i& V2 Y
    15. i=min
      ' s) Q2 ~% x5 r. E* h+ P
    16. while i<max+1 do
      7 K2 M  n+ j0 b4 J
    17. url = "http://baike.baidu.com/view/#{i+j*max}.htm"
      + F2 i9 s1 q; k7 I/ [9 Q1 T
    18. puts "#{url}"
      0 s! a( I6 i& U& N7 y6 `
    19. data=open(url){|f|f.read}- \/ h' c  t% D" x* h" H5 M8 j
    20. open("temp\\#{i}.htm","wb"){|f|f.write(data)}
        z# m0 v$ f3 \% _6 g" V
    21. puts "download"
      8 d4 X6 l0 u; q, y) b
    22. i=i+1
      2 l/ g/ f( j6 E7 Q
    23. end' q1 x$ I  t* y3 Z# C9 N
    24. i=min$ j1 m" |$ a4 d7 T
    25. while i<max+1 do
      & `: |% K, Z- U7 s
    26. puts "#{url}"* d3 D& A+ m8 v( @& w3 v' h
    27. url = "http://baike.baidu.com/view/#{i+j*max}.htm"/ T3 f7 g8 W2 o. n% L! E' \
    28. doc = open("temp\\#{i}.htm") { |f| Hpricot(f) }
      # i8 Q. ?) B$ b8 f, z8 i2 z
    29. title0= (doc/:title).inner_html
      6 @" j4 E1 m) |, A' b# K
    30. title=title0.split('_')% Z" y3 L4 G- G; J5 q& {+ {
    31. content= (doc/"#lemmaContent").inner_html
      , P! f$ q+ E6 D! O# i- b
    32. temp=content.gsub(/<\/?[^>]*>/, "")
        V9 @2 O/ |$ b) S5 L# x
    33. temp=temp.gsub(/编辑本段/, "")
      + z0 Q, ~0 `, F  S, D- F
    34. dic.puts title[0]  l  s1 l. V. `  F& ]  S) _* \
    35. dic.puts "原文链接:#{url}"( f8 y) }# u4 Q" }2 b2 f3 j9 Q. C' p
    36. dic.puts temp+ l( c8 a: e$ f) G
    37. dic.puts "</>"
      " }  f2 c2 y8 \) v$ O
    38. puts "converted"+ S5 S$ a/ r" V) J  N+ X' B
    39. i=i+10 ]- j' [' t- x4 f3 x
    40. end
      ; [% O) B" ^8 {% j3 K3 L# z1 y# r
    41. dir = Pathname.new("temp")
      " s' @, }# b- B8 o5 |
    42. dir.rmtree
      2 ~' f: `4 n+ t/ \$ C
    43. puts "cache cleaned", |- a5 O4 O9 s- p( C# `) Z: w3 N
    44. end
        t6 m4 q& u1 I* G6 n2 J; r. u
    45. dic.close3 J$ X+ S, F: }) Y* s
    复制代码
    windows上ruby地址3 @5 X" l7 Q! v) z( ~
    http://rubyforge.org/frs/download.php/29263/ruby186-26.exe
    " k$ x) T! k8 Z: D# ulinux这个不是问题6 \! o6 Q6 E! W6 w

    3 N. G0 k7 m6 t一次不要开多个窗口,百度会封3 k( z6 r6 K) ^

    ( K9 g, l: u# E# F* A5 ^[ 本帖最后由 发哥 于 2008-10-15 21:12 编辑 ]

    评分

    1

    查看全部评分

  • TA的每日心情
    开心
    2018-10-17 09:01
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    发表于 2008-10-15 17:03:49 | 显示全部楼层
    不错,谢谢楼主0 o! v; P) n7 y* o" P
    快速下载时 ,速度大约超过200个/分钟,百度就会封锁ip 10分钟。6 {* x& }* b4 v# a
    3 I5 ~0 G6 S- C7 P, g+ r
    我对ruby不是太了解.
    " d4 o* C/ K- D% P' x$ E看楼主程序用意显示为下载百度数据,过滤html标签,转为txt,保存为txt文件。

    该用户从未签到

    发表于 2008-10-15 17:14:10 | 显示全部楼层
    不太明白,还是要对发哥的辛苦劳动说声谢谢!
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-15 20:01:16 | 显示全部楼层

    回复 3楼 haoyang2007 的帖子

    就是把这个代码另存为xxx.rb
    $ }/ H4 \; o2 h1 b% g0 _安装ruby解析程序
    . ^+ m. M( V  ]' Q: D1 Y- N- e需要几个下几个。就指定下几个。
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-15 20:06:33 | 显示全部楼层

    回复 2楼 ldlcau 的帖子

    更新了一个,下一些转一些。
    8 A% h. }  v; k
    $ x0 o( a8 l( N[ 本帖最后由 发哥 于 2008-10-15 21:08 编辑 ]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-16 11:14:29 | 显示全部楼层
    第二个在服务器上刷刷到12128的时候被封了一会儿。
    好友营 该用户已被删除
    发表于 2008-10-17 00:12:47 | 显示全部楼层
    发哥可以加上限速的功能吗?
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-17 10:43:49 | 显示全部楼层

    回复 7楼 好友营 的帖子

    貌似openuri没有这个功能,因为http协议本身就没有状态,而且文件太小,速度肯定无法达到满速。
    " {  U9 w& g9 Y- e( F6 s" u2 y7 c要限速用外部程序下载吧 比如:
    0 A0 }9 d/ [, ]" I5 _/ m; t# \wget -i http://baike.baidu.com/view/1.htm -limit-rate=50k
    好友营 该用户已被删除
    发表于 2008-10-18 20:27:53 | 显示全部楼层
    原帖由 发哥 于 2008-10-17 10:43 发表
    * {6 E4 f9 ^2 |2 c# D  A貌似openuri没有这个功能,因为http协议本身就没有状态,而且文件太小,速度肯定无法达到满速。
    - I& J. P! D0 x1 F" _要限速用外部程序下载吧 比如:
    , K9 K& N4 M4 J9 R* ]8 `/ fwget -i http://baike.baidu.com/view/1.htm -limit-rate=50k
    2 `7 Q. t+ ~# P

    7 E& q$ }! Y+ W8 e:L 发哥,教教我吧.

    本帖子中包含更多资源

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

    x
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-19 03:33:49 | 显示全部楼层
    不好意思,发错参数了。。
    & E: Y4 U( _& z! ]% ~wget --limit-rate=50k http://baike.baidu.com/view/1.htm4 a# }9 d  R; }7 Z
    批量下为1 2 3 需要写bat脚本5 S1 X2 T* R5 X# Q
    以下是循环100次的。

    1. " p0 I3 m7 M5 W* C: b5 E0 p5 v3 _9 W
    2. @echo off5 I0 D' x+ i# I, Z
    3. :loop9 X3 T1 u/ I; i" c# T
    4. cls
      6 g8 m  F$ x: D/ f% M
    5. set /a num+=1
      : L" {5 a( }+ W& R+ G
    6. if %num%==101 (( K, y" v. p7 @/ D( V  J
    7. goto exit
      # _8 G; X4 N5 u+ u7 z& y& a
    8. )( z) J# l; T# A8 l+ [, d
    9. echo %num%.htm1 H6 p' M7 Z6 Z& L5 _% f: W
    10. wget --limit-rate=50k http://baike.baidu.com/view/%num%.htm( G7 K! r9 Z' p
    11. goto loop# m% a" A. d" Y' |
    12. :exit
      ) n) i. N2 k% D0 W7 _# b
    复制代码
    , ?2 [: w" Y% N* ^/ y" L! h
    ruby脚本把第一个修改一下。。
    3 J0 ]9 ~9 K; W3 y/ `
    - [# {* O" D  q/ ?可以用本版版主老大的php采集的方法,是最上道的。后台全是微软干,不需要你弄。! m/ @5 ?3 z# @$ Z3 W0 N

    ; d' T; H1 g+ z7 I2 v: }[ 本帖最后由 发哥 于 2008-10-19 03:36 编辑 ]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-19 03:41:24 | 显示全部楼层
    其实我还写了一个分页处理程序,初衷是做baidu百科精选词条的。8 p- V$ K- ^6 l: o* e) X

    2 Y; U- K$ `5 Y4 V# y可惜baidu的观礼员太懒,至今只推荐了5k个。应该让管理员打他PP了。:lol
    好友营 该用户已被删除
    发表于 2008-10-19 11:16:14 | 显示全部楼层
    还是弄不懂.试了下用teleport pro,不会用;用迅雷太慢了.并且现在还找不到那个DSL complier:L
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-19 15:33:08 | 显示全部楼层
    你就用这个么
    5 a# ?3 P7 D* s! o" z/ |https://pdawiki.com/forum/thread-883-1-1.html
    好友营 该用户已被删除
    发表于 2008-10-19 17:05:43 | 显示全部楼层
    慢慢消化一下.:)
    好友营 该用户已被删除
    发表于 2008-10-20 09:47:37 | 显示全部楼层
    看来我的水平还是玩不转这个了:L .各位大大可以把你们采到的TXT原始文件放到网上吗?或有没有工具把mdx转回TXT的?
  • TA的每日心情
    开心
    2018-10-17 09:01
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    发表于 2008-10-21 08:46:22 | 显示全部楼层
    不知道你要TXT原始文件用来做什么。
    & o: f8 F- G1 Q原始文件有近3个G,直接操作处理都很麻烦。
    好友营 该用户已被删除
    发表于 2008-10-21 20:49:23 | 显示全部楼层
    我用你教的wget在采了,但abbyy lingvo的编译器的容错性很差,整理非法字符,处理过长的段把我搞得头都大了,前10000条(采下来有4000多是空的)只能成功了2700多条:Q
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-22 14:34:46 | 显示全部楼层
    把那个ruby装上。5 c9 ]* Z0 g2 E! ^  o
    用这个脚本处理试试成功率

    1. 9 n- k9 s# Z0 o+ H' p! n" v
    2. require 'rubygems'
      5 v$ n! F# x+ j
    3. require 'hpricot'4 _; Y/ q; }  I+ p9 k* c6 `
    4. require 'open-uri'
      3 o, U! S) }2 A; @0 j% {$ p
    5. max=200
      ( S# W+ I9 \# f7 G0 a8 ^. t0 L
    6. min=1/ F7 [6 u$ ^  S( o2 }
    7. dic=File.open("baidudic#{min}-#{max}.txt","a")
      $ P5 ^" G, l$ o  W$ W' @
    8. while min<max+1 do' o5 w7 @8 m" ]# H! \: x# x
    9. url = "#{min}.htm"
      : V& o9 E8 ]4 @( A9 J! s5 B+ |
    10. puts "#{url}"
      8 q6 U/ R( ?0 J/ ~( L8 C$ O
    11. filetemp=File.open(url)
      4 ]' m4 f/ ^9 y! a+ E/ c+ k* b
    12. doc= Hpricot(filetemp)
      " t  X: e! S2 J! {1 W$ l+ O7 i: ~& r
    13. title0= (doc/:title).inner_html
        v: L8 F' T* _- e5 {& x/ v
    14. title=title0.split('_'); n  C! V3 ]# p- J% H! h3 t
    15. content= (doc/"#lemmaContent").inner_html
      ) i* p' {# B! K% t! l' k& R6 \
    16. temp=content.gsub(/<\/?[^>]*>/, "")
      + o0 ]4 a! U( Z$ `/ l3 ^
    17. temp=temp.gsub(/编辑本段/, "")
      4 r/ b( g1 A, z: f# d0 D
    18. dic.puts title[0]( O5 E6 \3 c% K6 [* o( t
    19. dic.puts "原文链接:#{url}"# X( m! ^9 `7 m1 @, @
    20. dic.puts temp
      2 i* t- w' C7 e* `( X  a+ ^
    21. dic.puts "</>"5 G1 Y" a  _( u( [' n
    22. puts "OK"; J6 J1 H1 W  `7 Z) K
    23. min=min+1$ N1 F# @# q6 u% ~! z- l
    24. filetemp.close" E2 G! j9 H6 D0 A& w* ~
    25. end5 z- w3 N7 I. a# T2 e8 i
    26. dic.close( ^1 p. f6 H6 @9 m( q: p5 U7 V
    复制代码
    6 @$ C. \4 |" X! i; Z' ]! _
    [ 本帖最后由 发哥 于 2008-10-22 14:39 编辑 ]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-22 14:53:29 | 显示全部楼层
    abbyy的没用过。。
    ( q- ?4 T& i7 e# U貌似是这样的格式吧
    - }7 m7 z4 q" }8 Q. {name; j; M# O$ p! x. m5 w& c: R, C1 u' K4 V
    [m1]xxxx) a% G% k# S( H) i" x$ Q& Y
    xxxx' d9 c" L4 U8 L' K9 }
    [/m]
    1. 4 L0 g" t  C2 V1 Y! V) {/ W
    2. require 'rubygems'
      * U7 V: `! T8 D
    3. require 'hpricot'
      7 h9 P; T# |. q; {
    4. require 'open-uri'
      : Z5 i5 Q3 _' ?4 ~5 r# y
    5. max=2003 D  V. y. H) ~& M# H" A( s
    6. min=1
      ; K0 Y" h. }! d1 i# w5 r8 i
    7. dic=File.open("baidudic#{min}-#{max}.txt","a")0 g  O% a  s* m! ?% n& E
    8. while min<max+1 do  ?( c( |- n% t0 w1 X$ z5 x  t
    9. url = "#{min}.htm"
      9 A+ M, H$ R) l; I# C
    10. puts "#{url}"0 Q  T/ e) |8 F) U: r& a3 l
    11. filetemp=File.open(url)
      $ R& N; d! x0 E- J1 s- m
    12. doc= Hpricot(filetemp)
      3 J- ^' F- h5 u! N* p
    13. title0= (doc/:title).inner_html
      / u( o3 t% k& {5 s) g; Z+ U# i
    14. title=title0.split('_')* F0 N3 X, d! y) [  N' K6 L+ l
    15. content= (doc/"#lemmaContent").inner_html
      6 E7 G- }1 a. ]3 v
    16. temp=content.gsub(/<\/?[^>]*>/, "")  ^* B5 c# G5 U! U  D
    17. temp=temp.gsub(/编辑本段/, "")1 k5 r/ O) E" X3 v6 |7 X
    18. dic.puts title[0]' u3 w0 T; H' Q" l0 R9 @
    19. dic.puts "[m1]"
        M& S3 F3 I, J. [. z
    20. dic.puts "原文链接:#{url}"$ m4 a( _0 s% X
    21. dic.puts temp
      4 d5 Q' D6 X* L( S: z
    22. dic.puts "[/m]"
      8 {$ O8 |# s+ R
    23. puts "OK"( ^" C; ~5 @; O7 c
    24. min=min+1
      . W/ o, A4 s( ^: ?7 `
    25. filetemp.close( z7 f$ [5 r1 x
    26. end
        y2 [6 d1 s; r  ]6 V. Z. p( X  U2 B
    27. dic.close- ]) P4 S5 I2 s3 D' ]0 c
    复制代码
    有没有词条长度说明请都回复帖子。。我试试,我也不熟。
    好友营 该用户已被删除
    发表于 2008-11-4 16:57:50 | 显示全部楼层
    不好意思,现在才回帖。2 ?$ N2 S7 L8 k6 {0 e  \$ t
    abbyy的格式是这样的:' m, K) ?+ Q5 {2 v9 G9 Q
    8 r) N. v9 G) ?5 I: K" N" E
    词条名1$ p- o1 _2 |/ B# E# B# i
    “tab缩进”[trn]词条正文
    - W. y& y. o6 A1 g+ x/ t“tab缩进”词条正文! D8 V* b; H2 F7 c  h8 k: j8 L
    ........
    * C# h/ R2 k7 d“tab缩进”词条正文[/trn]
    $ |3 @8 a# T# a, ^5 {9 w# h词条名2
    4 B- `' M$ v+ m  A“tab缩进”[trn]词条正文
    , i5 R  M4 ~& ^  }/ R% @“tab缩进”词条正文+ ?& n# U( t( i  y$ Z
    ........
    % ~/ T  T) _# [# J(tab)词条正文[/trn]7 J& U. n: E. T3 B& w* \
    # g9 Y* p: i# Q4 M
    每行的词条有长度限制,具体大概为300字符(150汉字)
    8 z. [8 D+ r$ g* _5 _9 O$ [8 S/ @[ ]\{*#为控制字符,如果要在内容中使用,就前面加\,如\[,\\,\]。
    ) f6 e& m0 q4 v) u! \1 c) ]( l& |* ]* a8 q3 ]( I
    [ 本帖最后由 好友营 于 2008-11-4 16:59 编辑 ]

    该用户从未签到

    发表于 2008-11-13 01:22:08 | 显示全部楼层

    支持,应该建立网格让大家一起出力加速更新

    一个人开太快太多就会被封一段时间,把这个工作分成多份,让比较可靠的高级别用户一起来做这件事可能会方便些.不会让一个人落入地狱,不会让更新变慢....
    $ V! G, f0 S+ o6 @2 f$ j发起者开帖子,设立分段,参加者报名加入,每人每星期运行一次程序,开几千个页面,一个人可申请多个段以增加效率,结果反馈给发起者,发起者整合输出.发起者负责管理,如参加者要求退出或者没完成任务,管理者对分段重新分配.
    6 D6 F  {* q9 v2 w3 {2 g) y发起者最好提供FTP空间给上传者临时使用.- ?1 F: }8 D3 X6 J5 Y" S1 a
    程序最好是VBS(Windows下用),又可编辑又可运行,每分钟开20个页面然后暂停,这样几小时之内应该都不会被封.这种强度对机器也没什么影响,完全可以全天运行,10小时就是12000条....这样大家分段不重复,还可以"同时"进行,提高些效率.( a, f* b! V2 e
    程序可以附带一个INI,保存本段参数,不同参与者下载不同的Ini(网页Java生成也好)或者手动设置,配合程序自动完成分段的任务,最好结果能自动上传到发起者的邮箱:).......
    ' ]. Y! K7 [6 I. H: X9 w9 j
    1 q% h6 o) U5 Y% w2 {9 V/ }6 P[ 本帖最后由 pplang 于 2008-11-13 01:33 编辑 ]
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2024-5-2 21:02 , Processed in 0.115479 second(s), 17 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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