掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 1988|回复: 20

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

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

    [LV.4]偶尔看看III

    发表于 2008-10-15 16:22:39 | 显示全部楼层 |阅读模式
    如果不想要图片和链接的可以用我瞎写的ruby脚本。:lol 6 u9 P9 ~# k4 g+ R; G7 R0 |
    max代表最大号,min是最小, 从1开始,每天想处理多少就处理多少,也可以放到服务器上全部处理成一个文件。
    1 ?6 b- m' ]; @) D. y2 A! Z2 I& T低网速情况的代码
    1. require 'rubygems'5 }- ]( T7 W: t. |6 f0 `
    2. require 'hpricot'* q# v3 S$ I! h! w; u
    3. require 'open-uri'
      ( p2 N" _0 P' ^. `* v+ E; ]6 `
    4. max=200
      + {2 [5 i' U- T7 Z4 x# C' P
    5. min=12 {3 o' l; k+ G0 g& g6 r% R, y
    6. dic=File.open("baidudic#{min}-#{max}.txt","a")5 z$ K9 f" ^& b. n+ z" p
    7. while min<max+1 do
      , p+ n8 u( @: d3 z; o3 X2 S
    8. url = "http://baike.baidu.com/view/#{min}.htm"
      6 ^6 c9 C2 p1 s" S5 x
    9. puts "#{url}"
      0 A! q( t+ T. _. I& V; Q+ u1 u
    10. doc= Hpricot(open(url)). Q3 P% ?$ q3 [% n+ Q4 s6 e
    11. title0= (doc/:title).inner_html 6 P1 n( r7 R' K# r& {7 [
    12. title=title0.split('_'); W3 E  k! w) Q  Q3 Z
    13. content= (doc/"#lemmaContent").inner_html; ~  \# S/ _3 r5 K- ?
    14. temp=content.gsub(/<\/?[^>]*>/, "")
      / ]. Z* H! P4 X* D) c" [6 H
    15. temp=temp.gsub(/编辑本段/, "")
      0 b7 N2 D/ q; Q7 i0 Z
    16. dic.puts title[0]
      6 e. C- k6 E6 T) {/ `
    17. dic.puts "原文链接:#{url}"
      % E8 J. \' K2 Y4 {& E+ c
    18. dic.puts temp
      ! u; k# A  @+ I$ y
    19. dic.puts "</>"
      4 ~6 Y$ L: y( t( U0 d, [0 e+ e
    20. puts "OK"
      , m' \2 K7 b1 |1 i% x4 d  x' A
    21. min=min+1" Y# X1 D( h, N3 q' J+ r+ Z' r
    22. end
      + T% @8 D8 O! m. @
    23. dic.close+ h, |4 ^, N2 V1 a
    复制代码
    高网速情况的代码

    1. ( ?8 J+ h3 {1 e4 ^( N6 k: ?* ?1 n8 L
    2. # baidubaike 2 mdict by daming
      7 ]  b! X; f$ H" h. p8 g4 l
    3. # [email protected], @% |8 p- y* B0 I% t4 F- I
    4. require 'rubygems'- M* E' U0 Y* \1 E. f+ @1 `, V5 v
    5. require 'hpricot'
      , L3 b. o4 o( N! ?' a3 N5 M+ j* y
    6. require 'pathname'( j& A5 |, B: r, f6 |1 l
    7. require 'fileutils'( H, p" n* g! ~5 @- w( |5 _
    8. require 'open-uri'& o- y6 J1 u8 B
    9. Maxn=20: e& [2 {4 ]# M5 I
    10. max=100& S) I, B+ q, X5 I; m
    11. min=1
      : y" m( F- l& T% x
    12. dic=File.open("baidudic#{min}-#{Maxn*max}.txt","a")
      % q( N% D; F3 B5 z' e; l7 G
    13. for j in 0..(Maxn-1) do. m& ~6 r% K8 _
    14. FileUtils.makedirs("temp")
      , ^; z- b, U7 S4 u( K* S$ m
    15. i=min5 Y6 C; Y' e4 X1 x6 @( e- ~0 `2 J4 R
    16. while i<max+1 do9 V  z% Y0 I4 A1 a. z8 i& |0 S
    17. url = "http://baike.baidu.com/view/#{i+j*max}.htm"
      - x' ?! y4 P9 G3 I" D! d2 C
    18. puts "#{url}"
      ' w& q8 o, C3 m) g0 f+ U; k4 o4 V$ t
    19. data=open(url){|f|f.read}
      * w  _2 i( e6 f
    20. open("temp\\#{i}.htm","wb"){|f|f.write(data)}
      ' h0 Z2 a0 e/ U
    21. puts "download"  T6 I( M) `( r$ K, f- W$ v" a
    22. i=i+1  e  l3 Q) U( p6 h& [6 N+ g
    23. end; I6 I6 W% ]/ x( ~* \
    24. i=min/ V1 x+ X# y- _" p4 v
    25. while i<max+1 do
      % ?1 f! c6 g1 _
    26. puts "#{url}"+ O& \2 w8 I( X5 c* b& g" W# G
    27. url = "http://baike.baidu.com/view/#{i+j*max}.htm"
      ( c% i' U0 B! m5 `
    28. doc = open("temp\\#{i}.htm") { |f| Hpricot(f) }8 A) P: d3 d( O) m
    29. title0= (doc/:title).inner_html
      ( [: ~4 ?9 U9 p' ^9 D! j
    30. title=title0.split('_')" }+ W! k+ |2 `' k
    31. content= (doc/"#lemmaContent").inner_html
      0 ?4 p9 M2 q9 j2 O6 V& I8 V7 {* O
    32. temp=content.gsub(/<\/?[^>]*>/, "")2 C. R* h. a5 v9 c. G/ O+ `: u
    33. temp=temp.gsub(/编辑本段/, ""); M3 ~  Y/ t' U  U0 R
    34. dic.puts title[0]
      1 X" d7 B$ }, ^1 F# J  J, w" f
    35. dic.puts "原文链接:#{url}"
      5 v3 }2 w2 V. L% @) B
    36. dic.puts temp
      * y3 v& q8 H3 g! l
    37. dic.puts "</>"; h& D5 o7 \2 w+ A* a+ j
    38. puts "converted"/ N& z9 I' |! K+ s1 C& [" L
    39. i=i+1
      - u# V8 m0 O2 l3 S' [# `0 _
    40. end
      ( {4 R6 ^6 T3 V. p
    41. dir = Pathname.new("temp")
      : X& `. Y, e! H& m" t: O
    42. dir.rmtree
      0 I0 {9 a$ m; X  H9 G2 v2 B
    43. puts "cache cleaned"
      ; m$ c4 p: _1 |# ^. j
    44. end
      ; r/ n; c4 _% O2 f* I; X: r& A. M
    45. dic.close
      ) _; u' f( f% R' m
    复制代码
    windows上ruby地址: E0 F& c' X: s) w0 r# u8 f
    http://rubyforge.org/frs/download.php/29263/ruby186-26.exe9 y% W* [" _- p6 m: K% l2 u
    linux这个不是问题  F; T- g& I$ s1 @
    $ x* [0 |) |# w
    一次不要开多个窗口,百度会封4 P/ @# Q1 w. B% ?
    $ Y, K, ], h6 _/ Y. f. ?0 u$ D
    [ 本帖最后由 发哥 于 2008-10-15 21:12 编辑 ]

    评分

    1

    查看全部评分

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

    [LV.4]偶尔看看III

    发表于 2008-10-15 17:03:49 | 显示全部楼层
    不错,谢谢楼主) ]4 U4 n; ^% a, z* q6 e
    快速下载时 ,速度大约超过200个/分钟,百度就会封锁ip 10分钟。! b! p  S4 h) N, j! F( R

    / ]. N0 A, I, U8 t+ _! Z3 J- F: J我对ruby不是太了解.; R0 ]7 [* a% n+ g- l7 p# L+ p
    看楼主程序用意显示为下载百度数据,过滤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
    6 s5 y. u8 \/ X! b安装ruby解析程序' Z! N4 ~% `; d  Z+ e
    需要几个下几个。就指定下几个。
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

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

    回复 2楼 ldlcau 的帖子

    更新了一个,下一些转一些。
    - ^8 R9 Z* E% {; U" O/ p! y' }; M
    0 \7 R; n' W7 n, C& q4 q[ 本帖最后由 发哥 于 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协议本身就没有状态,而且文件太小,速度肯定无法达到满速。: n5 y5 j7 d5 s( ~; W
    要限速用外部程序下载吧 比如:
    % h# y' r$ N- o: Ewget -i http://baike.baidu.com/view/1.htm -limit-rate=50k
    好友营 该用户已被删除
    发表于 2008-10-18 20:27:53 | 显示全部楼层
    原帖由 发哥 于 2008-10-17 10:43 发表 $ I( ]# x* |' |. j* V2 @1 ~3 `
    貌似openuri没有这个功能,因为http协议本身就没有状态,而且文件太小,速度肯定无法达到满速。) T& Z5 y& V- g  X8 T5 @) Y" l, H
    要限速用外部程序下载吧 比如:1 n* O, G$ V$ d8 H: r! T  l  W; R# k
    wget -i http://baike.baidu.com/view/1.htm -limit-rate=50k
    ; N# R* w7 o- ?/ `) p$ |
    " n1 e7 {* N1 G. W( q& y- D' q
    :L 发哥,教教我吧.

    本帖子中包含更多资源

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

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

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-19 03:33:49 | 显示全部楼层
    不好意思,发错参数了。。
    & ~2 L# j7 J3 ^/ swget --limit-rate=50k http://baike.baidu.com/view/1.htm
      U2 ~/ i4 f+ `+ H批量下为1 2 3 需要写bat脚本: `( P( e4 o3 M
    以下是循环100次的。
    1. 4 Y8 W9 H' v  {( [. r4 D
    2. @echo off; t4 ]4 m: ]5 I" l
    3. :loop7 a" b* k0 `! }2 w7 I
    4. cls
      9 \" m% b  u2 X- d: Z) c
    5. set /a num+=1
      / g: c4 u2 N* Y5 S# ?
    6. if %num%==101 (
      5 L& ]  F! z; ~2 i
    7. goto exit
      3 I$ z9 P- v5 o$ i  B1 _; D
    8. )
      - J0 ?5 C4 L1 B% t6 c
    9. echo %num%.htm
      ; k: I# M4 [4 @4 u
    10. wget --limit-rate=50k http://baike.baidu.com/view/%num%.htm( k6 M# t( ?2 ~2 m9 E; @
    11. goto loop
      : z  p5 E: y$ j  K8 c  ]
    12. :exit
      " h2 Y0 h0 C) ]# t8 h- A2 J% F
    复制代码
    2 M0 k% @1 ~7 S% C; W2 i
    ruby脚本把第一个修改一下。。
    9 V& `. s" T7 Y0 G& h. V: n4 b- x. p) Q
    可以用本版版主老大的php采集的方法,是最上道的。后台全是微软干,不需要你弄。/ ~: D1 N; H: k% Q  C9 B8 o% f

    + w7 i3 i* P. G- h[ 本帖最后由 发哥 于 2008-10-19 03:36 编辑 ]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-19 03:41:24 | 显示全部楼层
    其实我还写了一个分页处理程序,初衷是做baidu百科精选词条的。7 o0 U6 v& N5 u9 W6 i) p

    + b1 x, P! i! t  c, e4 t可惜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 | 显示全部楼层
    你就用这个么
      F- C& J' _& A3 whttps://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原始文件用来做什么。
    2 |8 e) m( d* |& m8 `' c0 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装上。8 x4 f& j* Z( }
    用这个脚本处理试试成功率

    1. . Y1 ~& q7 v% W' ^
    2. require 'rubygems', w- j7 x6 X3 o+ h- d, ]
    3. require 'hpricot', G9 A6 @# L0 q5 y7 }' ?
    4. require 'open-uri'
      & N! L: h& Q: ~. Z5 F4 h2 h5 K
    5. max=200
      4 g4 G# G1 d2 Z4 t- J3 F
    6. min=1
      " v+ t5 Z+ l7 L% |! T! w2 u
    7. dic=File.open("baidudic#{min}-#{max}.txt","a")
      ) W6 ~1 b, B9 s5 [
    8. while min<max+1 do
      3 g' @. \, L0 o/ H  }$ c( n% M' M+ N1 Q
    9. url = "#{min}.htm"
      . F' R9 U. x( E1 r2 D2 `1 j
    10. puts "#{url}"$ E  @& v2 z% B6 |9 O! k
    11. filetemp=File.open(url)0 q8 [4 K% q0 Q0 _3 F
    12. doc= Hpricot(filetemp); S5 r6 x8 g& I0 }, I; k$ |& {- G
    13. title0= (doc/:title).inner_html4 [  ^+ m! K# t5 G* I* U. c
    14. title=title0.split('_')& K- h9 y! D- @# @$ w# C; ^2 U# Y% b
    15. content= (doc/"#lemmaContent").inner_html
      + x6 l! h$ \  E. [
    16. temp=content.gsub(/<\/?[^>]*>/, "")
      7 ]2 c0 u& y5 _" d, o" n- l. w& x
    17. temp=temp.gsub(/编辑本段/, "")
      $ x6 a" i- X4 j: r9 W  d, ?% J
    18. dic.puts title[0]& F# M% c8 M( h: V8 q9 m. x" u
    19. dic.puts "原文链接:#{url}"# r3 ?+ f) @. N6 ^: c0 s& w
    20. dic.puts temp  H; d8 Y  L9 M
    21. dic.puts "</>"
      & K- U( ~) _  A; \+ m
    22. puts "OK": V% v" B" l$ i3 b$ D" s8 I
    23. min=min+1( ]7 U7 S9 D' L# ]$ ^! h4 ]  @
    24. filetemp.close( f& O3 u& k2 \: q! X+ V8 S: O1 k
    25. end
      2 s6 F6 U; e; k
    26. dic.close1 Z7 A! b0 J; n' I% I" H
    复制代码

    ' f) i: E% J7 J" I[ 本帖最后由 发哥 于 2008-10-22 14:39 编辑 ]
  • TA的每日心情
    开心
    2018-7-19 02:16
  • 签到天数: 20 天

    [LV.4]偶尔看看III

     楼主| 发表于 2008-10-22 14:53:29 | 显示全部楼层
    abbyy的没用过。。" P2 E- }! S6 T
    貌似是这样的格式吧1 R+ d5 ^% g/ o( _. n! M8 Z. j' ~0 v
    name
    1 }, f; Y* p9 A5 y. A3 r[m1]xxxx9 h! s$ H- q' s
    xxxx
    . \9 I' }5 m5 Y# w. w8 u5 V$ W[/m]

    1. 1 R( A0 X/ {8 U
    2. require 'rubygems'. b2 t: W" E# N) a. N$ A  t) H' t
    3. require 'hpricot'0 z# P; d' l6 {- A; y+ n8 \/ T8 A
    4. require 'open-uri'
      1 H, O( n! L$ o, u
    5. max=200+ ?4 _  F+ |# ~
    6. min=1" h- N! j$ \! `7 @9 R7 E
    7. dic=File.open("baidudic#{min}-#{max}.txt","a")) K/ Z: s) q& o( W7 G7 u- v& G
    8. while min<max+1 do6 C- z, \1 H* ]/ C' }* w6 y
    9. url = "#{min}.htm"1 q) `5 Y: j- Z7 F) T* Y& E6 H
    10. puts "#{url}"+ e7 @: j3 R8 X1 F
    11. filetemp=File.open(url)% t3 f2 [  v. w
    12. doc= Hpricot(filetemp)7 H  ~6 q- ]0 O) c
    13. title0= (doc/:title).inner_html$ ]1 s0 g; W9 e4 n' j8 d; N2 b
    14. title=title0.split('_'), |8 f: F" u( \, b1 s
    15. content= (doc/"#lemmaContent").inner_html% {4 L# A5 ?- A; E  a9 l
    16. temp=content.gsub(/<\/?[^>]*>/, "")5 E0 M0 F( \+ Q$ U/ c; [
    17. temp=temp.gsub(/编辑本段/, "")
      - Z* q9 x: K  A& {
    18. dic.puts title[0]
      6 P  Q+ y2 W' C  C& {% f6 L- x
    19. dic.puts "[m1]"3 S" C" f8 n' W- s0 e8 s
    20. dic.puts "原文链接:#{url}"$ N, v) ~% x1 @
    21. dic.puts temp
      6 K. [6 z9 S, e6 V* U0 x* p
    22. dic.puts "[/m]"
      $ X) p; D9 o# x" S$ r
    23. puts "OK"
      + @: L4 [, W: l2 \' T: Q
    24. min=min+1
      , w; R9 y- {4 S; U
    25. filetemp.close
      1 |" {3 `  p0 T8 H# ~
    26. end
      4 T& {! C, D+ X7 {3 ?# g: U
    27. dic.close
      4 y: ?4 ^* a2 R3 @% k- @( k/ v
    复制代码
    有没有词条长度说明请都回复帖子。。我试试,我也不熟。
    好友营 该用户已被删除
    发表于 2008-11-4 16:57:50 | 显示全部楼层
    不好意思,现在才回帖。4 ~2 A9 J6 k! c" s& ^1 W0 g* ]
    abbyy的格式是这样的:
    3 E* K1 K+ h2 _, R; O
    5 w4 V% Z1 E+ W& S. l& K$ l3 @+ `词条名12 P$ G8 g. Y5 A, A5 |
    “tab缩进”[trn]词条正文5 [, v$ z; M6 e. c
    “tab缩进”词条正文6 Y* @& ]  {* _7 L: G  J
    ........
    0 T1 x0 V0 a! V6 K5 n“tab缩进”词条正文[/trn]& b# }% w$ g  S, n' F+ Z, ^
    词条名2& m! o' d. y6 j% G  i
    “tab缩进”[trn]词条正文/ R% @. ^7 Y4 V1 e+ e# _; [& z
    “tab缩进”词条正文; x1 J. b8 f" g8 l1 m! u! z$ \- T3 Z
    ........6 {+ d; G  c7 I: E* u
    (tab)词条正文[/trn]0 [2 {! T( _, _9 W
    ; I( ^  a1 s$ a+ r! k
    每行的词条有长度限制,具体大概为300字符(150汉字)# A+ }7 X- n' M2 z* q
    [ ]\{*#为控制字符,如果要在内容中使用,就前面加\,如\[,\\,\]。
    7 K- g0 z7 M6 Z- N$ ]) g* N4 u( }: k& B& m# |2 e; \
    [ 本帖最后由 好友营 于 2008-11-4 16:59 编辑 ]

    该用户从未签到

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

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

    一个人开太快太多就会被封一段时间,把这个工作分成多份,让比较可靠的高级别用户一起来做这件事可能会方便些.不会让一个人落入地狱,不会让更新变慢....
    : t* z1 c, \7 \, W" `发起者开帖子,设立分段,参加者报名加入,每人每星期运行一次程序,开几千个页面,一个人可申请多个段以增加效率,结果反馈给发起者,发起者整合输出.发起者负责管理,如参加者要求退出或者没完成任务,管理者对分段重新分配.
    ; \6 {8 t4 p. H5 S+ e# ]% P发起者最好提供FTP空间给上传者临时使用.% B: i/ s* D' S. f
    程序最好是VBS(Windows下用),又可编辑又可运行,每分钟开20个页面然后暂停,这样几小时之内应该都不会被封.这种强度对机器也没什么影响,完全可以全天运行,10小时就是12000条....这样大家分段不重复,还可以"同时"进行,提高些效率.( O- ~* ]3 G- i5 E6 U' m
    程序可以附带一个INI,保存本段参数,不同参与者下载不同的Ini(网页Java生成也好)或者手动设置,配合程序自动完成分段的任务,最好结果能自动上传到发起者的邮箱:)......., @: j4 ^$ p. q4 ]0 T9 p! A

    5 b7 \) N. C8 A9 {[ 本帖最后由 pplang 于 2008-11-13 01:33 编辑 ]
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

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

    GMT+8, 2025-5-2 02:31 , Processed in 0.031880 second(s), 28 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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