a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 301|回复: 1

[其他] JAVA技巧:Webharvest网络爬虫应用总结

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
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;
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:24 | 显示全部楼层

JAVA技巧:Webharvest网络爬虫应用总结

  
. H, ^$ Q* `7 o6 D. h# W1 I, ]6 j  {1 \0 ]$ ]# u- N# v5 Y$ f/ z
  for $row in $item//li return
: r( a8 \) ]) s0 |2 v* P  V  
2 Z9 M: h, t, B9 @7 v7 L  }6 h2 G4 o" \9 Q# r3 U( N7 L0 t
  
% P: d! P& M$ ?; T8 W  ]]>/ u9 E/ D1 J% Y6 x. ]8 f/ \3 I
  
( ?* p! M* q. Y, b8 k" U/ m8 `7 y3 ~  
3 z1 b! @+ ~. }3 t  
8 M+ F: X7 r3 j  L2 ]/ v   ]]>
6 y) L/ U. @7 x5 O2 O5 J+ f  ! i  r  w: w3 D8 I
  
' \. K8 [7 {' f, F% n  这个设置装备摆设文件分为三个部门:+ b5 K  R9 T' S' K, D/ D$ M6 l
  1. 界说爬虫进口:! \! S& }: z2 ~  [' a8 f& m) h
  & f' z4 x/ A. T- x
  9 j* u6 ^, b7 S
  
2 t' _# w- N* B  . `6 M' m4 V0 r7 O
  
+ Z/ \- \+ X/ q0 [/ I9 i4 Y  爬虫的进口URL是:http://www.tianya.cn/bbs/index.shtml, O# ~* @. _) v  W9 y
  同时,指定了爬虫的爬数据的编码,这个编码应该按照具体的页面编码来定,例如膳缦沔的进口页面的编码就是utf-8。其实,有良多的中文页面的编码是gbk或者gb2312,那么这个处所的编码就要响应设置,否则会呈现数据乱码。; ^9 x7 y! f6 M+ E
  2. 界说数据的过滤轨则:4 L4 \' S. ?! i! ~" `9 @) K
  
" T" a1 ?( r# Y: z$ l  H  
; |5 Q- }* j. z( U. K4 ^' C  : r2 q5 z! N! n) ]! _+ t
  
8 B: c0 q3 m  j/ Y  9 \/ Z5 G; p0 g$ i  E
  膳缦沔设置装备摆设就是按照XPath年夜爬得的数据中筛选合适的内容。这里需要获得所有的# C2 v6 G( O* ]" `" }6 C
信息。有关XPath和XQuery的语法请网上发芽。
: s) }! ]( E5 F3 S  3. 最后一步就是措置数据。可以写入XML文件,也可以使用SetContextVar的体例把收集的数据塞到一个集结变量中,供Java代码挪用(好比:数据直接入库)。
! O1 }* S1 ^. k3 _3 M  s  u  这里是直接写入XML文件,然后解析XML即可。
* M1 t/ o8 \5 r% ]  注重下面的for轮回,这是XQuery的语法,供给遍历的功能。因为年夜版面小版块是一个树状结构,需要这种遍历。
, I& B' X9 {; o5 _& R4 Y  1 c6 p% R( a# }' a) o
  {/ S. M4 N" L% D, H/ b8 ]5 ^
  for $row in $item//li return( v' \. i. o6 q
  
! x! J# }% U: X+ C0 U  }9 Y* I9 c& o" V. c% M4 o, L
  4 F& k& V1 ~% R: a
  相关的Java代码如下:; H8 H. e* I  Q
  String configFile="tianya.xml";2 ]5 l6 ]6 @* A9 I
  ScraperConfiguration config = new ScraperConfiguration(configFile);
) Z# ~! Q& d# j" L/ \+ l  String targetFolder="c:\chenxinhan";% I# `" J. K( s' N
  Scraper scraper = new Scraper(config,targetFolder);
/ \7 M+ y4 n& l3 s; U$ S( V  //设置爬虫代办代庖
; G  u" c0 `/ p8 |" f3 n9 b/ O  scraper.getHttpClientManager().setHttpProxy("218.56.64.210","8080");9 }8 [2 O4 \! F
  scraper.setDebug(true);' c! }- H0 p( L8 D' E1 B2 a: I7 D
  scraper.execute();
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 08:21 , Processed in 0.215890 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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