Web-Harvest是一个Java开源Web数据采纳工具。它能够收集指定的Web页面并年夜这些页面中提取有用的数据。其实现事理是,按照预先界说的设置装备摆设文件用httpclient获取页面的全数内容(关于httpclient的内容,本博有些文章已介绍),然后运用XPath、XQuery、正则表达式等这些手艺来实现对text/xml的内容筛选操作,拔取切确的数据。前两年斗劲火的垂直搜索(好比:酷讯等)也是采用近似的事理实现的。Web-Harvest应用,关头就是理解和界说设置装备摆设文件,其他的就是考虑怎么措置数据的Java代码。当然在爬虫起头前,也可以把Java变量填充到设置装备摆设文件中,实现动态的设置装备摆设。
6 P9 g) n5 q0 {+ G/ j8 ~ 此刻以爬取海角论坛的所有版面信息为例,介绍Web-Harvest的用法,出格是其设置装备摆设文件。$ Q0 B1 P& r6 t/ M! C8 S3 a' Q
海角的版块地图页面时:http://www.tianya.cn/bbs/index.shtml
% E4 ~) I0 S) d7 o7 ? [海角的部门版面列表]
* e; V7 }0 t- F3 i1 o) f% B 我们的方针就是要抓取全数的版可托息,搜罗版块之间的父子关系。( @7 C/ J& n4 F9 S
先查看版块地图的页面源代码,追求纪律:
% k/ f' }+ Q) g- k - F. i6 o- L3 M* B. n
3 r( H1 r; [. g5 X5 x# J1 r4 W 社会平易近生
% R1 w2 i0 [2 E
: J6 ] l, I: R3 S1 m% a G, ?% }
, {1 {7 o- E# v% d3 O+ h4 J ~ # V% R+ \/ Z! T& e+ |, @- H
: S# g+ [3 R4 d* p# S4 g: B
+ |9 a$ `* c& _5 {
- 海角杂谈7 `2 m" u [# H1 c8 ]' V4 h
. ?4 T6 }2 P4 q
- 国际不雅察看. t" i* e; v, @1 Y5 |
7 K9 k& L' O K$ t, v) {/ E# d0 m
- 海角时空, G3 a* w/ f5 L! k
n) f" i; B- E! B% ^7 L
- 传媒江湖+ Z6 ]* W1 U: R; C. }; G
…… //省略
4 P4 i' U3 M- N& W. G ' A1 V- E- n) z4 v# B6 `
4 K8 v3 T# D6 w1 V: g x 9 m* q+ `$ Y$ O/ r
" r. j2 a" m8 ?
) A f6 |2 T( [
4 K$ h& z. O: \1 g$ b" A, i X
( {2 m0 m2 \5 t; F% |( n" _2 Q& S A
' W+ S2 O+ ^7 @4 Q9 B$ I 9 a7 H- D! l, n) \+ D) w! s D
文学念书& ^/ _! c4 u6 j! m! Q
6 G' d. k& Z) }5 a6 B2 M$ k' Q r* Z) c
# U( \* U, X5 f" N5 X: N* p5 c2 q+ m* |8 p
) g/ j o! j# R( A8 p# p- 莲蓬鬼话) |5 m& i: _0 F7 Q$ o9 E9 g" l
0 H9 B/ d! K- c' [ - 煮酒论史
4 X" q8 F; t( l3 G4 x % ~2 e* |$ u2 R, b) C. |* v
- 舞文弄墨; O3 w* U5 d Q3 N+ K
……. //省略
( Y8 W7 Q# Y! m: A! ` . R/ ^) |( N4 D6 R* @$ W- f
1 y3 h; C6 M6 \) K ) C/ F0 k7 ]' M; v' p( J
9 L, V/ `- ?' H" M& n7 e ' u, a5 i2 o5 S3 X
; B, F) }; H5 Z
" R# q; Z# z" q0 E8 Z: @' u+ C/ L
……. //省略
; Z) I1 J% ^- W0 y 经由过程页面源码剖析,发现每个年夜板块都是在
8 b* }! @' G, `! a的搜罗之下,而年夜板块下面的小版块都是下面的形式包含的。
, W4 y0 q0 m0 W3 h$ f, y xxx+ r4 N9 h" \7 ]! P# {* n5 r3 v
,这些纪律就是webharvest爬数据的轨则。, n: ]) F) o7 M/ G, P1 J
下面先给出全数的设置装备摆设:(tianya.xml)0 s& v( {+ H* C; \( ]( z; [
8 C- N3 `! w+ H, q$ ^5 ~ c* n
k( t* |' n5 |# Q
8 s& f* Q5 k0 ?' Q7 y" ^
5 k; Z! m1 y7 B8 l. I8 k+ h 6 l2 W: R. d* p6 m9 x9 b+ f
' v; V; [- Y* Y2 y1 \# S
8 H# M# H5 s% s* ^+ `2 K
- B7 C% D& ~6 l9 c) A
5 D1 S' D5 k0 O, p( Z1 L- R B, _/ z( R7 @9 X2 @
1 k2 y$ m9 r Z* i
8 x' }4 C5 j& M: E) }9 i6 `! E
]]>; l7 y7 e8 v% p5 a+ a7 }7 m3 R
; {: {/ G; E# ^+ W6 C6 S
, v3 J! {! W3 ` 1 Z7 h/ w# y7 q" b+ v
6 o( k/ P0 w4 J2 G7 a( G% b8 G- d
2 h' m" u7 r; I) m ) w. g# H, U( H* h" Y) [4 H p
) U( Q$ u" a9 c# M4 \- ~
declare variable $item as node() external; |