掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1985|回复: 20

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

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

    [LV.4]偶尔看看III

    发表于 2008-10-15 16:22:39 | 显示全部楼层 |阅读模式
    如果不想要图片和链接的可以用我瞎写的ruby脚本。:lol * [2 m& }8 `6 ?$ B# a' ?) C: i5 s
    max代表最大号,min是最小, 从1开始,每天想处理多少就处理多少,也可以放到服务器上全部处理成一个文件。
    8 u8 h; B5 l% ^% m低网速情况的代码
    1. require 'rubygems'
      * Z, ]5 ^4 Z$ ~  |% d! Y
    2. require 'hpricot'
      3 s1 k! t3 E1 H/ o) f4 V
    3. require 'open-uri'
      $ r( {4 b, c# g3 |6 n* ~
    4. max=200
      & l* U% ?. ]- P2 p# \5 I9 K" {
    5. min=1! o6 c/ U( k/ g7 z% {
    6. dic=File.open("baidudic#{min}-#{max}.txt","a")
      * U6 P; m# X$ p4 G+ h
    7. while min<max+1 do ) \4 S  N# y4 j. f4 x1 w5 J
    8. url = "http://baike.baidu.com/view/#{min}.htm"* n) Z9 y8 O/ m" U& y
    9. puts "#{url}"
      / [( e( g# y$ s. G( }# i, a$ ?" q
    10. doc= Hpricot(open(url))
      ! Y# d! ]( ^4 O
    11. title0= (doc/:title).inner_html
      " T; B$ e& f- _6 z8 ~9 R; |
    12. title=title0.split('_'); p, c, c7 u$ O4 K" E
    13. content= (doc/"#lemmaContent").inner_html
      ' @0 b; Y, t& {! o) H3 \. @
    14. temp=content.gsub(/<\/?[^>]*>/, "")$ z* h( S! }* k' b
    15. temp=temp.gsub(/编辑本段/, "")
      - n& ~- A7 w6 u
    16. dic.puts title[0]
      4 ], N/ P4 ]# @
    17. dic.puts "原文链接:#{url}"0 A/ x* q9 l: M+ ]
    18. dic.puts temp) j6 Y, y0 B/ A  w" N
    19. dic.puts "</>"
      1 _. C0 D3 G/ m- b% t
    20. puts "OK"- o, H% w4 D+ {3 Q
    21. min=min+1/ V  ?2 U: |- Y. K' s1 G4 Y: S& {
    22. end7 q5 [" R$ V1 R8 v
    23. dic.close
      & E3 I% V3 a2 J) M: U1 V* n
    复制代码
    高网速情况的代码
    1. ! s. X" u5 ?1 }% j, L0 t
    2. # baidubaike 2 mdict by daming9 J7 Z! E0 [$ Y5 K. m4 X( Y
    3. # [email protected]" j( s( ~! I: K) D& e$ F1 x. {6 B
    4. require 'rubygems'; k, s# w& J! _1 ^
    5. require 'hpricot'4 l  d% E. |5 z3 y1 e+ _
    6. require 'pathname'" Z2 e  z" v2 r; F! C4 T8 ^
    7. require 'fileutils'1 o- q9 g7 J  |0 \4 U
    8. require 'open-uri'
      - V# f7 G0 g0 F' w
    9. Maxn=20- r7 M5 o2 J6 r4 L& I
    10. max=1006 X1 C% D5 P+ h6 s
    11. min=16 Z( v- f- Y) A3 {1 G0 E. o" M( u2 O
    12. dic=File.open("baidudic#{min}-#{Maxn*max}.txt","a")
      . H6 u2 ^, T; B2 f$ k3 m, f
    13. for j in 0..(Maxn-1) do
        u# V% _! k/ s# S7 V* f
    14. FileUtils.makedirs("temp")* T% B9 @, m2 r: d# G7 S! `
    15. i=min7 y8 T, P- ?- i# I
    16. while i<max+1 do
      ! o0 J, T- k! G" q) H8 X, O, T
    17. url = "http://baike.baidu.com/view/#{i+j*max}.htm"
      " }, @" Y% Y& P0 ]2 G6 r3 T
    18. puts "#{url}"
      5 f& D- w6 J9 J0 D" t
    19. data=open(url){|f|f.read}  Q- O+ c$ }! h/ f! A8 _9 R/ r
    20. open("temp\\#{i}.htm","wb"){|f|f.write(data)}
      8 N$ K1 S4 Y( g! h) q: W
    21. puts "download"
      ) d7 z8 x& s* u7 Q
    22. i=i+1/ S$ p& b1 ^9 H; J( d! U
    23. end
      - d' Q' h8 I) P( Q2 F1 `6 y
    24. i=min; E0 C. z6 Y$ _* |* Q
    25. while i<max+1 do
      & k8 ?4 l' x0 v2 |7 z
    26. puts "#{url}"# L  |/ m% ^1 t  ]
    27. url = "http://baike.baidu.com/view/#{i+j*max}.htm"' s* S; [+ ?) O# H5 o* V, ?
    28. doc = open("temp\\#{i}.htm") { |f| Hpricot(f) }! Y0 m/ O. O1 J% J
    29. title0= (doc/:title).inner_html
      8 P: q' R5 n8 g( C1 o
    30. title=title0.split('_')! N& W( N- \# I. g: q" i2 ?# a
    31. content= (doc/"#lemmaContent").inner_html
      ( ^4 c+ L9 t: ~8 D* M& h
    32. temp=content.gsub(/<\/?[^>]*>/, "")& L" z1 m. y' E$ i7 L0 H
    33. temp=temp.gsub(/编辑本段/, "")) n8 z2 T9 G4 m, u6 a
    34. dic.puts title[0]" X+ }$ L& Q1 l7 B* |6 e
    35. dic.puts "原文链接:#{url}"
      0 @5 A& c1 T- Q$ Y! D
    36. dic.puts temp
      ( h. r( q/ d1 O; V
    37. dic.puts "</>"
      7 U5 V" K8 z! Y3 H2 J* I$ k3 E
    38. puts "converted"
      6 n- T2 w- P$ C
    39. i=i+1
        F, b1 x# ~5 E8 S. P
    40. end6 }& {$ r; c  n" e. m% O3 E
    41. dir = Pathname.new("temp")
      7 [2 ^$ [& n" Q; P
    42. dir.rmtree
      , {9 w# s) W9 m# E
    43. puts "cache cleaned"7 p+ ^4 }  Y6 u
    44. end/ ]4 k( `0 @+ z, U1 c- {% _/ d2 T
    45. dic.close
      * y# g# k* j- f4 }( z3 k: \
    复制代码
    windows上ruby地址+ T3 X. V! A6 O+ I% u
    http://rubyforge.org/frs/download.php/29263/ruby186-26.exe
    0 j1 N  w, c0 o; q) }5 Jlinux这个不是问题8 w& h9 `9 J' F" N4 M# {
    4 _) _( k! f1 O9 r! q
    一次不要开多个窗口,百度会封
    2 M% z# j# C. _+ Q8 f2 d8 w2 N( @/ Z3 H" H" Z  E; B0 P) b4 ~/ ]9 t2 ?
    [ 本帖最后由 发哥 于 2008-10-15 21:12 编辑 ]

    评分

    1

    查看全部评分

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

    [LV.4]偶尔看看III

    发表于 2008-10-15 17:03:49 | 显示全部楼层
    不错,谢谢楼主5 i" `9 C; [4 {5 o: L
    快速下载时 ,速度大约超过200个/分钟,百度就会封锁ip 10分钟。" U, Z" P( ~5 [# \

    1 D4 _- _4 k  ^. j" C我对ruby不是太了解.
    + [' `( ?9 w, C* ~8 q8 U看楼主程序用意显示为下载百度数据,过滤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
    * r9 E0 j% P5 i8 s2 `9 s5 q安装ruby解析程序/ L8 p; m2 i9 F: g* R- x
    需要几个下几个。就指定下几个。
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

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

    回复 2楼 ldlcau 的帖子

    更新了一个,下一些转一些。# i. u0 K- {! |8 j4 a( W

    8 {, u- n' T" Q! y, w[ 本帖最后由 发哥 于 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协议本身就没有状态,而且文件太小,速度肯定无法达到满速。# A' g; C  N# X! f
    要限速用外部程序下载吧 比如:5 s+ L, V* c) i" I7 y6 o
    wget -i http://baike.baidu.com/view/1.htm -limit-rate=50k
    好友营 该用户已被删除
    发表于 2008-10-18 20:27:53 | 显示全部楼层
    原帖由 发哥 于 2008-10-17 10:43 发表
    0 `5 T. z: l7 B7 E2 A5 t" k5 h( W: B貌似openuri没有这个功能,因为http协议本身就没有状态,而且文件太小,速度肯定无法达到满速。
    9 u) v# I2 S7 L. t9 o要限速用外部程序下载吧 比如:  k9 {4 f7 Q6 t# I! {' h
    wget -i http://baike.baidu.com/view/1.htm -limit-rate=50k

    7 T6 H3 t7 u- }- M8 j4 j
    4 \; p0 G9 i9 y  t8 @+ J:L 发哥,教教我吧.

    本帖子中包含更多资源

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

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

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-19 03:33:49 | 显示全部楼层
    不好意思,发错参数了。。7 M) w5 F& A4 X
    wget --limit-rate=50k http://baike.baidu.com/view/1.htm6 t  V% ]0 j2 q) Z& y- X( l
    批量下为1 2 3 需要写bat脚本: h' F. f, a( v
    以下是循环100次的。
    1. ) I$ V8 T) `  N" @) g$ f7 Y2 e
    2. @echo off
      6 K" u  y* Z( W1 j7 W+ Q/ c* d3 Y  S
    3. :loop# w, d- y6 ?( K" L. A5 v3 p) z
    4. cls
      4 f) |1 j  G, O8 K
    5. set /a num+=1
      + e6 t. I; q5 p7 C8 \: Q0 s0 v( c
    6. if %num%==101 (
      % E) q; g, d/ e8 q( B5 m
    7. goto exit
      & s+ {( F8 p9 b& C/ z
    8. )$ c) i$ T0 D; c* J- U6 x5 q, `+ O* C
    9. echo %num%.htm8 p$ e: \9 T$ [9 \
    10. wget --limit-rate=50k http://baike.baidu.com/view/%num%.htm7 \% {/ g' ]  i& H- ]
    11. goto loop
      7 ?# a* ^( E/ j% ]" e6 O
    12. :exit$ r% q, i3 Q3 [$ ^+ k
    复制代码
    # v  Y, d" p" Z
    ruby脚本把第一个修改一下。。- T- J0 ?7 E& f' @
    ! I( `! _# M4 B! V: x% @, x
    可以用本版版主老大的php采集的方法,是最上道的。后台全是微软干,不需要你弄。7 s4 m2 p; v6 k) D; ?
    ! p' {* @( G! C+ N7 X7 u
    [ 本帖最后由 发哥 于 2008-10-19 03:36 编辑 ]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-19 03:41:24 | 显示全部楼层
    其实我还写了一个分页处理程序,初衷是做baidu百科精选词条的。
    3 o& J2 s- f6 E+ L
    # W: ^5 [6 e  ~% B$ I3 M. m4 }可惜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 | 显示全部楼层
    你就用这个么7 D: s0 u! Z1 R8 k& H8 ?5 V8 C! f& ^7 v
    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原始文件用来做什么。
    - A' H) m* ^2 }- I9 J. Z: D1 n( @原始文件有近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装上。/ X: `) @* n/ T2 r1 y
    用这个脚本处理试试成功率
    1. ; X) W5 @- ^4 G8 r( k+ }2 g
    2. require 'rubygems'
      ; L! A5 S+ n1 L* y1 C' k
    3. require 'hpricot'& u/ ?8 P% _. C, N! v4 i
    4. require 'open-uri'9 U7 P6 c/ l* g( X/ p
    5. max=200& N4 j2 P5 E) i% f( F( a$ e$ }
    6. min=1
      ' M0 X& B% |. ~, ^, z- a
    7. dic=File.open("baidudic#{min}-#{max}.txt","a")
      ) s3 }$ s, T- @3 {5 _9 I" t
    8. while min<max+1 do" p- d, U3 {' a& g4 o9 |
    9. url = "#{min}.htm"
      ; `0 r" M1 v! y$ S  W( ]* {5 T; L. _
    10. puts "#{url}"6 p- g- w0 A- m" K* _! @
    11. filetemp=File.open(url)
      7 Y8 K# F! \$ Y# g( n9 p$ O% C
    12. doc= Hpricot(filetemp)
      ( i4 y, n$ M+ X4 N
    13. title0= (doc/:title).inner_html
      2 o# T! B4 d7 a, o1 B
    14. title=title0.split('_')
      # `  z! n2 i+ @, B- r
    15. content= (doc/"#lemmaContent").inner_html
      ! Z* ~+ X4 L+ J6 N9 i4 W* _9 h
    16. temp=content.gsub(/<\/?[^>]*>/, "")# i1 C& j2 l( U$ a" ^
    17. temp=temp.gsub(/编辑本段/, ""); ~/ `* g% X  c: J
    18. dic.puts title[0]: R6 _; E) \0 A# y" o# O
    19. dic.puts "原文链接:#{url}"4 M& j$ o+ R) [: [4 a# U) u
    20. dic.puts temp
      1 |0 g9 o8 G/ b2 G+ j
    21. dic.puts "</>") ?2 g$ Y- k3 D! d8 w
    22. puts "OK"
      ' d4 d% `% n6 K' K/ R0 C  ^
    23. min=min+1
      5 _, ^# I# w5 _) X' B0 m
    24. filetemp.close2 |# J0 m: s& x6 z  |
    25. end
        P$ y4 q! L! T. \6 w9 X; M* D
    26. dic.close) F3 x, e3 \0 [5 [0 ?8 P  E
    复制代码

    8 f/ y5 ^1 }+ L5 X2 m% D* [[ 本帖最后由 发哥 于 2008-10-22 14:39 编辑 ]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-22 14:53:29 | 显示全部楼层
    abbyy的没用过。。
    5 t! u& U+ V3 d8 |) r貌似是这样的格式吧% M- j: P6 H) _
    name
    * B8 u7 }9 \/ Q1 ~6 L) t[m1]xxxx
    ) \$ h% d  h# B6 {xxxx
    ! H+ J& I7 t  G2 v4 J[/m]
    1. $ O1 Y4 g4 X7 L4 c
    2. require 'rubygems'
      8 P% z' f4 f3 p: Z! N7 |+ @2 W* D
    3. require 'hpricot'6 ?) r. d7 x# g4 U' m2 u+ m: ^
    4. require 'open-uri'
      3 F3 d& r& z% P- F
    5. max=200- t5 W& c: x5 t& B8 y2 c
    6. min=1( U1 j+ K- i9 X- x- d( e
    7. dic=File.open("baidudic#{min}-#{max}.txt","a")! U9 C% p5 X# Z) u0 b
    8. while min<max+1 do
      ; A; w" g. |- ^  [1 P
    9. url = "#{min}.htm"/ @! ]* C6 [2 L% x( ]* c3 l
    10. puts "#{url}"
      ! `( ^. _/ H. K9 M/ O2 u' N/ b
    11. filetemp=File.open(url)
      , w8 t  v# Q; n' n2 Q
    12. doc= Hpricot(filetemp)  v. Z2 {; F: Y8 [8 w
    13. title0= (doc/:title).inner_html
      8 H4 C; f- J* F
    14. title=title0.split('_')
      6 y  h5 {  s4 b$ \! X/ {# T5 Y
    15. content= (doc/"#lemmaContent").inner_html
      0 x( g& Y3 i1 |# I
    16. temp=content.gsub(/<\/?[^>]*>/, "")
      * K, K4 M) c% v& M& H& x( M& z: }
    17. temp=temp.gsub(/编辑本段/, "")! V0 [; t! d% W! n* V
    18. dic.puts title[0]& i8 }8 H0 [' o6 \( ^
    19. dic.puts "[m1]"
      ; [6 y" O3 ]# M" k
    20. dic.puts "原文链接:#{url}"
      % ?6 i* d7 U: m- S2 F
    21. dic.puts temp
      $ I6 U# w& i- v1 |& @
    22. dic.puts "[/m]"* s1 @; p: g5 u7 w7 e! `! {- k7 t
    23. puts "OK"% Z" n9 {; G* A( Z
    24. min=min+19 |4 ?& s$ n& F  C( G( g! {
    25. filetemp.close
      $ k' v8 z5 u# ?6 \
    26. end
      / u/ u$ o. w7 W/ V
    27. dic.close& \% `7 b' f; T" m! x
    复制代码
    有没有词条长度说明请都回复帖子。。我试试,我也不熟。
    好友营 该用户已被删除
    发表于 2008-11-4 16:57:50 | 显示全部楼层
    不好意思,现在才回帖。5 ^/ \- W3 X6 q; }
    abbyy的格式是这样的:# I1 \8 R; z7 J$ r
    2 ]& h& f& _; O$ L. @
    词条名1. j& S2 v$ t0 h+ n$ V7 \" e
    “tab缩进”[trn]词条正文
    ! d' C9 t3 t! T& B: A  `“tab缩进”词条正文1 y; D. d/ J0 v% ~
    ........
    8 h) J5 ]2 N5 R( s- ?% j9 y“tab缩进”词条正文[/trn]
    : U4 J) f5 q% S) W" D& C词条名2
    ! I! @" \1 k. @3 R“tab缩进”[trn]词条正文
    $ O+ o! z$ z* `8 W6 p7 v8 i% [“tab缩进”词条正文
      u8 {- u8 D6 @. h& i3 R* ]........4 p9 W' G% c- v5 {4 g+ N5 z) X- H
    (tab)词条正文[/trn]
    8 g0 R& m0 y$ g8 K) D
    " q. A: D- ]) B3 |/ Z每行的词条有长度限制,具体大概为300字符(150汉字)" r. @+ R6 V2 u- z- u, g
    [ ]\{*#为控制字符,如果要在内容中使用,就前面加\,如\[,\\,\]。
    7 C& l5 P# @5 `! b3 [4 n( j( W" |( o) @
    [ 本帖最后由 好友营 于 2008-11-4 16:59 编辑 ]

    该用户从未签到

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

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

    一个人开太快太多就会被封一段时间,把这个工作分成多份,让比较可靠的高级别用户一起来做这件事可能会方便些.不会让一个人落入地狱,不会让更新变慢....
    ( ~* L" J/ v' P发起者开帖子,设立分段,参加者报名加入,每人每星期运行一次程序,开几千个页面,一个人可申请多个段以增加效率,结果反馈给发起者,发起者整合输出.发起者负责管理,如参加者要求退出或者没完成任务,管理者对分段重新分配.; d1 B+ Y  ^9 z( e5 V; F" S
    发起者最好提供FTP空间给上传者临时使用.
    " w' g% R4 R' p; A' I程序最好是VBS(Windows下用),又可编辑又可运行,每分钟开20个页面然后暂停,这样几小时之内应该都不会被封.这种强度对机器也没什么影响,完全可以全天运行,10小时就是12000条....这样大家分段不重复,还可以"同时"进行,提高些效率.% X* ?) d) l5 i3 l
    程序可以附带一个INI,保存本段参数,不同参与者下载不同的Ini(网页Java生成也好)或者手动设置,配合程序自动完成分段的任务,最好结果能自动上传到发起者的邮箱:).......
    - h0 A3 _* w% R+ v4 ^; @
    / {/ A1 y/ G8 j: B/ L( ?0 c[ 本帖最后由 pplang 于 2008-11-13 01:33 编辑 ]
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-4-18 23:36 , Processed in 0.032798 second(s), 31 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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