掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 2044|回复: 20

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

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

    [LV.4]偶尔看看III

    发表于 2008-10-15 16:22:39 | 显示全部楼层 |阅读模式
    如果不想要图片和链接的可以用我瞎写的ruby脚本。:lol
    % C+ [* F( G3 H" B" s# Emax代表最大号,min是最小, 从1开始,每天想处理多少就处理多少,也可以放到服务器上全部处理成一个文件。0 J6 _& p  X& k9 M' h$ l: p: X
    低网速情况的代码
    1. require 'rubygems'
      ' r; Y0 K8 q6 m, F
    2. require 'hpricot'3 R: E/ f# @" n4 l. K4 I
    3. require 'open-uri'& S. K) I' U# j6 m0 @' Q
    4. max=200
      4 Z. Q7 H7 u+ U* {4 L+ Q
    5. min=1. s: A6 e7 ?* F7 }8 T
    6. dic=File.open("baidudic#{min}-#{max}.txt","a")% v! i4 K+ `3 k, Z
    7. while min<max+1 do
      % J9 n) O1 N) O5 G9 ]# E" E
    8. url = "http://baike.baidu.com/view/#{min}.htm", I7 c2 v. G: I3 }9 d# _' h
    9. puts "#{url}"( K8 e) b! I& G9 L2 I& h1 `- t4 m
    10. doc= Hpricot(open(url))
      8 j5 n/ a6 b0 [) h
    11. title0= (doc/:title).inner_html
      ) ~0 ]% Y5 U8 t& Y6 s
    12. title=title0.split('_')
      2 Z# m. R' r& [0 |1 A
    13. content= (doc/"#lemmaContent").inner_html
      1 B  P2 j9 g. k# E1 ~- o
    14. temp=content.gsub(/<\/?[^>]*>/, "")
      * k& _& {3 P( m$ z5 E% o( @
    15. temp=temp.gsub(/编辑本段/, ""), _" G* t  a3 c0 r7 h& f% v
    16. dic.puts title[0]
      : D" h) O8 ]: z& B/ E! j. Z
    17. dic.puts "原文链接:#{url}"! r& r) Z9 R& L# {) w' K
    18. dic.puts temp
      3 E8 h- D: \! |1 C8 {7 s3 Y) U
    19. dic.puts "</>"
      % {) |' C) `# P8 N  k" I! m
    20. puts "OK"
      * S. U: Y2 |6 l6 k) C2 v
    21. min=min+1
      ; z1 h- H# b1 V" z6 K6 y
    22. end& [' P7 A% @9 o! Q! c
    23. dic.close8 P) n+ u5 {/ F7 r7 N+ I
    复制代码
    高网速情况的代码

    1. - _$ @% S. S, P( S; @5 ^3 q1 `
    2. # baidubaike 2 mdict by daming: D3 D. b9 N! i! o0 @( M2 `
    3. # [email protected]
      1 p/ w" B  J) d( Y# T# [# }7 {* g1 O
    4. require 'rubygems'
      : _( r1 n8 W! f
    5. require 'hpricot'5 _5 {9 \8 d. S3 U: C& b" `
    6. require 'pathname'! I( G4 ~( a- c1 O7 p$ \8 A
    7. require 'fileutils'# C  x3 g5 f& V! u$ }0 y+ x
    8. require 'open-uri') x& ~6 S4 ]" G% r- C& o4 ~6 {' Y, N
    9. Maxn=201 W0 \0 K( `+ T4 _) p$ d
    10. max=100; M- ~5 S  e! B) F4 O7 Y
    11. min=1. g9 \! D6 x+ s( z. m8 }4 U3 D5 U+ L  j6 G; f
    12. dic=File.open("baidudic#{min}-#{Maxn*max}.txt","a")
      6 b- H' A7 E0 V& Y$ Y
    13. for j in 0..(Maxn-1) do  ?8 b3 F5 e$ b1 e
    14. FileUtils.makedirs("temp")
      3 ]+ r  j* t! v
    15. i=min
      9 W! V8 V' N9 V3 h
    16. while i<max+1 do
      # ?6 A8 j1 q4 f( `
    17. url = "http://baike.baidu.com/view/#{i+j*max}.htm"
      & K* L9 o6 K4 e" v0 C
    18. puts "#{url}"0 K: C" s# |/ `0 M3 v( r% f
    19. data=open(url){|f|f.read}: E7 C  o' |  y) e% ~2 h
    20. open("temp\\#{i}.htm","wb"){|f|f.write(data)}
      ; g4 x. N7 O4 \
    21. puts "download"
      / E8 p* i) p1 |% G
    22. i=i+19 C& ]) c6 H' v! z  @+ `: i
    23. end5 b. {  H) Z3 V9 H
    24. i=min) ^( R, P' y: C+ `* |
    25. while i<max+1 do
      7 a1 V/ U) G. D7 Q0 }% c4 \2 y
    26. puts "#{url}"' \6 \; ?( ~2 R
    27. url = "http://baike.baidu.com/view/#{i+j*max}.htm"8 j; a: Q- o* I$ ^6 h5 g
    28. doc = open("temp\\#{i}.htm") { |f| Hpricot(f) }) W- Y+ \& V! v# @$ d
    29. title0= (doc/:title).inner_html
      : f) `5 W' A; r3 e, d. ~# \. u" L; j
    30. title=title0.split('_')0 s. n( f8 Y8 v3 ]' }( s' u9 S. p
    31. content= (doc/"#lemmaContent").inner_html) @5 J7 U$ K5 m1 [
    32. temp=content.gsub(/<\/?[^>]*>/, "")  Q: \  m9 s) w: R
    33. temp=temp.gsub(/编辑本段/, "")
      ) s4 R  @+ Z2 p3 J* J2 _, c! t
    34. dic.puts title[0]
      ' b! a: c( N8 ^5 S0 n* ]: Q
    35. dic.puts "原文链接:#{url}"
      4 B  q4 w/ z4 y; l2 \) F
    36. dic.puts temp
      0 }+ i4 `# h3 }4 Y- T
    37. dic.puts "</>"
      - w. j  z# o; T  y- F2 T6 _( [/ E
    38. puts "converted"
      4 Z. _% k0 k+ o6 I/ r' r
    39. i=i+17 |$ K* g. h2 A! q, `0 W0 S5 @! z
    40. end
      + a# Z' _# O! W- V/ j
    41. dir = Pathname.new("temp")
      9 z1 b6 b0 D" C
    42. dir.rmtree
      5 e3 H0 N, E" u" p; G) k
    43. puts "cache cleaned"
        I4 ?# P2 L& g3 E
    44. end" X6 [! K' N6 o8 G8 p4 T  S6 y4 c
    45. dic.close
      ! `* S! {) X. ^
    复制代码
    windows上ruby地址, T3 d7 X% n* I4 A' F
    http://rubyforge.org/frs/download.php/29263/ruby186-26.exe
    ! G( M4 _; U/ L( O6 n8 Klinux这个不是问题
    ; f+ g1 l0 G, S6 {" c( p* ^( b; d0 y" ~
    一次不要开多个窗口,百度会封4 L% i  S  ?* A1 E; ]) I

    ! p) g1 l& t- X' c[ 本帖最后由 发哥 于 2008-10-15 21:12 编辑 ]

    评分

    1

    查看全部评分

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

    [LV.4]偶尔看看III

    发表于 2008-10-15 17:03:49 | 显示全部楼层
    不错,谢谢楼主& m% [- X; N- G" g* @% {& W' n
    快速下载时 ,速度大约超过200个/分钟,百度就会封锁ip 10分钟。+ L# f+ w7 h' U" O+ A' W# Y

    . T3 _; `) N' E& ^+ I我对ruby不是太了解.1 G1 t( ^' E& k& l
    看楼主程序用意显示为下载百度数据,过滤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
    ! f  n3 v; J4 E7 p. M8 a安装ruby解析程序
    0 f% B) e6 Z2 T6 c  u; Q" E需要几个下几个。就指定下几个。
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

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

    回复 2楼 ldlcau 的帖子

    更新了一个,下一些转一些。
    & O* A* A) W: B! z! w
      y+ m- o8 b! e9 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协议本身就没有状态,而且文件太小,速度肯定无法达到满速。
    3 R" d/ v* C" z, y' b: n* M要限速用外部程序下载吧 比如:( N& z, C5 S: K
    wget -i http://baike.baidu.com/view/1.htm -limit-rate=50k
    好友营 该用户已被删除
    发表于 2008-10-18 20:27:53 | 显示全部楼层
    原帖由 发哥 于 2008-10-17 10:43 发表
    2 l! j& `& y8 P6 H& `貌似openuri没有这个功能,因为http协议本身就没有状态,而且文件太小,速度肯定无法达到满速。
    ( [$ g% i4 c1 q要限速用外部程序下载吧 比如:
    6 w5 o* Z& x$ a. O+ A; owget -i http://baike.baidu.com/view/1.htm -limit-rate=50k

    + q$ J% c2 B5 {( @" G9 w- w1 [6 ~# ^
    :L 发哥,教教我吧.

    本帖子中包含更多资源

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

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

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-19 03:33:49 | 显示全部楼层
    不好意思,发错参数了。。% ]6 U" n5 h. L& ?
    wget --limit-rate=50k http://baike.baidu.com/view/1.htm
    ; w3 H; ?$ N% e! C2 b批量下为1 2 3 需要写bat脚本
    2 D2 B$ j) H" a/ K7 `$ P7 {以下是循环100次的。
    1. + z' `( c" \: W) o  z- |
    2. @echo off
      0 `  S+ o0 u% p* Y
    3. :loop
      1 [% k( k( O8 @3 w* r! S1 m' ^) r
    4. cls
      # S  f1 Q0 c# U, n1 R. t
    5. set /a num+=1
      8 g0 o+ m  B, q
    6. if %num%==101 (
      / A  ~4 m, Z: H& r* ?+ m
    7. goto exit8 P5 {" s5 h) U/ h( P) n" W$ h$ c
    8. )
      3 T' }0 y: W. K2 c+ C; G
    9. echo %num%.htm- w2 h, r  b+ S
    10. wget --limit-rate=50k http://baike.baidu.com/view/%num%.htm! a2 f  `4 x& `" ]; l
    11. goto loop! j9 U7 D4 U7 q
    12. :exit( z+ ]3 [7 H, a- {) b7 F" s* _
    复制代码
    0 Q  U. K8 D7 j% }5 O
    ruby脚本把第一个修改一下。。3 Z5 ?1 N4 W0 N
    4 G- {( @3 v3 V) u
    可以用本版版主老大的php采集的方法,是最上道的。后台全是微软干,不需要你弄。" `! p/ [! D3 O5 J

    : v0 r( C# I# z6 W% n+ o[ 本帖最后由 发哥 于 2008-10-19 03:36 编辑 ]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-19 03:41:24 | 显示全部楼层
    其实我还写了一个分页处理程序,初衷是做baidu百科精选词条的。! C" t, @' R& t% @  }/ p# w

    ' L5 n' z) t: L- 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 | 显示全部楼层
    你就用这个么
    / Y0 K/ l( u4 q  N3 ?# o$ xhttps://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原始文件用来做什么。
    5 e, k9 H. W  A原始文件有近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装上。
    ) y( s( ?* }1 H用这个脚本处理试试成功率
    1. / D+ F* B1 Q4 y1 u6 o
    2. require 'rubygems'* b& t1 m$ I' W
    3. require 'hpricot'
      / c$ \" S5 @, ?! q- F2 N
    4. require 'open-uri'
      4 ?; v; L- }& I, X1 {4 U
    5. max=200
      7 b+ y, _3 o& D
    6. min=17 D, s, l" K! T9 S9 }% n( y1 Y
    7. dic=File.open("baidudic#{min}-#{max}.txt","a")" M0 ^# P  S& ?% E* I7 @, i
    8. while min<max+1 do
      ! u/ I' b' |' y
    9. url = "#{min}.htm"# H. F! b3 _( F  ^# N9 l1 V
    10. puts "#{url}"2 t' S0 B( N. g1 }5 D0 A+ @
    11. filetemp=File.open(url)3 a, U6 t# b( S; E1 Y/ {
    12. doc= Hpricot(filetemp)- p1 \5 w/ W- ?& h8 H
    13. title0= (doc/:title).inner_html' o1 R0 p/ U( `6 X5 G# m
    14. title=title0.split('_')
      . m% u  _6 ?! X# j
    15. content= (doc/"#lemmaContent").inner_html: \! A; d+ w5 u  Z
    16. temp=content.gsub(/<\/?[^>]*>/, "")
      : z/ X8 Q& H/ `% x7 Q0 E' a+ F
    17. temp=temp.gsub(/编辑本段/, ""), a  ]6 K4 ~) {" J3 i4 Z
    18. dic.puts title[0]7 u7 ?' S' z, K  _
    19. dic.puts "原文链接:#{url}", e" O+ `( ^. K; N5 n5 X, w+ Q) X0 W! A
    20. dic.puts temp
      ' p! S/ B4 o& O7 Y
    21. dic.puts "</>"
      3 ?+ x8 N0 m: I) f4 j1 l
    22. puts "OK"
      , f5 U; |$ t! y4 O; p
    23. min=min+1
      . j; Q: _4 \0 w
    24. filetemp.close
      : c  V- \7 m9 T6 J& p8 j! Y: a
    25. end
      / y; o+ }) C6 a; H% O1 U5 W
    26. dic.close$ N; |6 s! L# J! M
    复制代码

    * \& h* }- d+ q& @[ 本帖最后由 发哥 于 2008-10-22 14:39 编辑 ]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-22 14:53:29 | 显示全部楼层
    abbyy的没用过。。: j8 n! `" @9 E5 t
    貌似是这样的格式吧
    * R/ W3 g, v" n9 L3 E( Iname) Q+ W' r  ?% C& @3 ^) `5 N
    [m1]xxxx7 ?: Y* g! p9 q5 Y7 `  N
    xxxx
    ) L; n4 s, @, C& W[/m]

    1. ; G7 Z! N  W2 A* E  ^
    2. require 'rubygems'& z; r: B2 B4 I# k8 f: ]' _
    3. require 'hpricot'3 F' F* g- a; U  i6 y
    4. require 'open-uri'8 ~. Y1 S- }4 }( ^
    5. max=200& N! R( E" m( B- u0 Y
    6. min=1
      # t# U! |! C" _8 Z, `* Z  Y7 _
    7. dic=File.open("baidudic#{min}-#{max}.txt","a")! H+ \! M* A6 S& ]3 ^/ a- k
    8. while min<max+1 do2 q4 t, [8 W3 D- w' ^( i0 V, g
    9. url = "#{min}.htm"
      $ X  u' J8 h* z; p, Y! T
    10. puts "#{url}"
      * g9 X6 G, t  R2 y: U0 X
    11. filetemp=File.open(url)
      1 T- I( h" }) n0 g5 R- o
    12. doc= Hpricot(filetemp)
      - W2 @9 e) n* Q
    13. title0= (doc/:title).inner_html& V$ _# J. A6 r) ]# P( [% J" x* l, R, A
    14. title=title0.split('_')+ Y8 e: ^4 K- d! F6 {
    15. content= (doc/"#lemmaContent").inner_html
      & z1 \: E: j! k/ u# B; V5 A; P2 g# j
    16. temp=content.gsub(/<\/?[^>]*>/, "")
      / Z( T0 X; z/ r8 ~( {) ]
    17. temp=temp.gsub(/编辑本段/, "")* C& c2 O6 A& R
    18. dic.puts title[0]' ~4 d( \- U: Q9 E; N* M
    19. dic.puts "[m1]"
      9 w  e( F0 f4 n/ M. K4 H3 C, n
    20. dic.puts "原文链接:#{url}": t% A* D- M/ i% O" B
    21. dic.puts temp
      $ T% }# _9 D8 f% ]* F
    22. dic.puts "[/m]". }) U. m. i3 ?6 c2 K  ~% |
    23. puts "OK"
      2 o8 b$ a) ^$ H! e# ^! j
    24. min=min+1
      4 Q9 `4 c. F$ g, M2 H
    25. filetemp.close1 |1 p; P! |0 L6 f
    26. end
      2 s1 T' w' K# ^" ^
    27. dic.close! [" _' p; q" t$ r; ^$ ]
    复制代码
    有没有词条长度说明请都回复帖子。。我试试,我也不熟。
    好友营 该用户已被删除
    发表于 2008-11-4 16:57:50 | 显示全部楼层
    不好意思,现在才回帖。
    & B9 }! j$ z$ i4 Z; x, a7 X, Sabbyy的格式是这样的:
    - v% H% D5 U  B7 V8 k
    0 Q0 i& x7 @9 k& ?词条名1
    ) i% y4 d& P8 \3 N; V9 }9 @“tab缩进”[trn]词条正文
    6 o1 A  b, U7 L* m, y3 i“tab缩进”词条正文
    $ M8 F8 n) F! X$ ~% N9 {) k5 U........
    & F+ V* b- P8 h8 i; }1 b“tab缩进”词条正文[/trn]
    / B: Q# k0 N7 J& R词条名2
    , s, v3 g6 S: m“tab缩进”[trn]词条正文
    2 p+ z) ]7 M% ^“tab缩进”词条正文, H$ y+ P8 V8 t! f- L
    ........0 {+ h! o2 G8 @# S
    (tab)词条正文[/trn]
    ; {6 {  Y$ f: g) R8 m5 h6 r" ^2 ]" }0 ?0 J/ K/ I) ^
    每行的词条有长度限制,具体大概为300字符(150汉字)
    $ B! \+ G2 U2 F% |4 C( |[ ]\{*#为控制字符,如果要在内容中使用,就前面加\,如\[,\\,\]。
    + \& V% m6 C: q! A; |6 `" D, n0 [" Y
    [ 本帖最后由 好友营 于 2008-11-4 16:59 编辑 ]

    该用户从未签到

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

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

    一个人开太快太多就会被封一段时间,把这个工作分成多份,让比较可靠的高级别用户一起来做这件事可能会方便些.不会让一个人落入地狱,不会让更新变慢....
    ) p' j- x; |8 _; I& r' j发起者开帖子,设立分段,参加者报名加入,每人每星期运行一次程序,开几千个页面,一个人可申请多个段以增加效率,结果反馈给发起者,发起者整合输出.发起者负责管理,如参加者要求退出或者没完成任务,管理者对分段重新分配.: _/ _/ o$ ?) y8 x
    发起者最好提供FTP空间给上传者临时使用.
    / h) Y" D3 T3 y* h程序最好是VBS(Windows下用),又可编辑又可运行,每分钟开20个页面然后暂停,这样几小时之内应该都不会被封.这种强度对机器也没什么影响,完全可以全天运行,10小时就是12000条....这样大家分段不重复,还可以"同时"进行,提高些效率.! x% O9 H1 X0 b
    程序可以附带一个INI,保存本段参数,不同参与者下载不同的Ini(网页Java生成也好)或者手动设置,配合程序自动完成分段的任务,最好结果能自动上传到发起者的邮箱:).......
    ( B: |6 y: y7 Z5 b* ^# T+ ?3 F1 o& x- Y8 u
    [ 本帖最后由 pplang 于 2008-11-13 01:33 编辑 ]
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-6-17 03:00 , Processed in 0.032660 second(s), 31 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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