a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 309|回复: 1

[基础知识] JAVA基础:Webharvest网络爬虫应用总结

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
Web-Harvest是一个Java开源Web数据采纳工具。它能够收集指定的Web页面并年夜这些页面中提取有用的数据。其实现事理是,按照预先界说的设置装备摆设文件用httpclient获取页面的全数内容(关于httpclient的内容,本博有些文章已介绍),然后运用XPath、XQuery、正则表达式等这些手艺来实现对text/xml的内容筛选操作,拔取切确的数据。前两年斗劲火的垂直搜索(好比:酷讯等)也是采用近似的事理实现的。Web-Harvest应用,关头就是理解和界说设置装备摆设文件,其他的就是考虑怎么措置数据的Java代码。当然在爬虫起头前,也可以把Java变量填充到设置装备摆设文件中,实现动态的设置装备摆设。2 q2 r5 @# W. h4 J( o
  此刻以爬取海角论坛的所有版面信息为例,介绍Web-Harvest的用法,出格是其设置装备摆设文件。0 A: G4 F! v4 i, N
  海角的版块地图页面时:http://www.tianya.cn/bbs/index.shtml. Q5 y+ C9 J- [- g$ P8 t
  [海角的部门版面列表]
; ?8 D, m# o' n* x  o9 t" Q0 m  我们的方针就是要抓取全数的版可托息,搜罗版块之间的父子关系。; P/ \+ w0 l6 d: A% S# |
  先查看版块地图的页面源代码,追求纪律:
" ]2 V$ |! T: `& M% F" ]% l, G  
! ~' P) l6 r; z  
/ `8 ]! H9 y' \1 |' ~& @  ^  社会平易近生7 q, _9 R. u; t  P( o

- \( T8 ]7 l/ ^# L. M1 k, v6 L* @( }7 T) R4 h" }$ H* ^
  
8 _$ t3 @) [8 ~4 J
    $ D9 b7 }$ u8 Z8 O
      
    6 W- W: u& J7 k
  • 海角杂谈3 ~2 \  @. ?. {
      ; W* W- j0 X" k1 Z& W; ~
  • 国际不雅察看# E1 Q2 F2 _$ B& B5 d2 C0 ^0 k) y, {
      + g" H% ^* p4 P( X
  • 海角时空
    8 c2 j0 v' S' ?% w9 Y' j, Z  
    3 J" D: C+ x5 V; v6 o" m! i
  • 传媒江湖
    + U: {& K* Z# E  …… //省略) t1 I, w' o, q9 p
      " m( u3 M1 F, \( P3 P! r) l7 ?

( g" {. Z( g/ P# h2 ^0 }  : _+ d2 }4 i! f9 V

/ ]7 x; Y- q- K$ d  7 |' |  W. R! \6 v  [
. L) r' ?# f# N% e( `- M& H
  
, X; {3 w7 R" v; [. E( R4 u0 ~" |" {/ r8 k7 ~
  
  u) Y! h5 G8 t" S  ; a+ R6 q" n% H) [
  文学念书
) i/ V5 m) |: a& g- b6 P% |9 R$ S' ~. o: l
; N6 s# e; g6 D0 T& l
  5 z4 F2 a* x7 q

    1 d$ b+ A( \/ l  
    ( c4 o, T7 @0 N
  • 莲蓬鬼话
    ) T  t' ?8 m4 E9 |# X9 Z- b$ v  ! n0 d- a9 C( l: I- r8 T+ w
  • 煮酒论史
    6 V4 j. O" ^8 q# h. j# r) a2 A4 m  
    7 r% V; o# u7 |
  • 舞文弄墨9 F+ M, F  O' B" r1 f1 b9 N
      ……. //省略
    ; T& F+ d- J- k- V. V, p) J$ q* F  
    ' x( h% Z( X6 R4 R. v+ p" j

! `# M$ W' t9 V0 @  . v' k' Q1 ^; g2 \6 z. v$ }* d

! z1 @9 k) m, G! ~  
7 T: [+ Q( Q7 d9 _* n
) t: U/ o; `# ?0 t' P# @  ' @6 {9 ]+ |% S8 q* O8 d

& T' M& f8 L& g+ i, f  ……. //省略$ f% N& J# R" L) [
  经由过程页面源码剖析,发现每个年夜板块都是在  l9 O6 O& t$ }$ @
的搜罗之下,而年夜板块下面的小版块都是下面的形式包含的。5 t5 ~) p' T' F
  xxx0 H- h# G/ y: L6 n9 t" t; L% e. e
,这些纪律就是webharvest爬数据的轨则。
6 ]% t3 \1 [6 ]/ M  下面先给出全数的设置装备摆设:(tianya.xml)
  {5 O1 U/ v2 v2 q  
7 R7 {" m; z0 N2 k& x' i: u  , d) z. W' z3 z8 M4 V
  
) F: ]6 y" T! M* L3 r, k  4 K  Z& A6 [' O$ M# ?
  0 H, ?' m: i' @8 C5 c
  1 C8 v7 t' X; G3 f* X  B" v
  
# z2 |! ~& Y& s. N0 ~% e- Z  , f3 S; Z, j7 y8 Q3 N. y3 k3 m
  ( i. l( y0 p; K7 B& i8 P
  
6 ^8 \( j7 A0 l4 m& W# S0 [; p2 c  ! T: M: O  F, O. |( v
  
  S5 g8 R2 ]7 Q" k   ]]>
9 z" a/ T# H- e: O8 Y% W5 D2 p  7 v7 T0 V! Y4 h' f( c2 z
  
! n" \; {% N3 h7 H, w3 a  # e6 W1 h6 S  d( J1 M% e: ~1 p/ u
  
' C$ y5 |8 e4 H( z6 x  
  F' R' g. }$ P! ?6 ?  
( [# ]* O; x: Y5 i& T  & |) I2 C! s! S- ^( P1 n7 v" n
    declare variable $item as node() external; ) q8 ]8 U. G2 d$ X, p  L
  
回复

使用道具 举报

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

JAVA基础:Webharvest网络爬虫应用总结

  {
0 }" \! y, |% r  for $row in $item//li return8 U' r4 \, a& r4 T5 s
  
( x4 z. Y. M* ^% O4 d+ e) A  }
; g  v5 }- L+ a4 c% V) x+ H  8 v+ l$ C. g+ n! q
  ]]>/ S5 ]) H% E' R( r4 a# U: Z( L- o
  : s* N" [8 ^2 G7 i7 F% v9 x
  # I6 I9 F* l9 B2 ~$ K9 A
  
8 x+ z# d3 @4 s* e   ]]>& z( d0 r+ {- n; u- F+ [3 q
  
2 F1 ?: T6 k& v  
$ i" z" [4 r! }! G  这个设置装备摆设文件分为三个部门:
+ T# g& F. n, n  1. 界说爬虫进口:
8 G2 z- t" |8 `/ a. n% G  . o5 e$ d' U1 m' d3 l; Y
  
1 m7 w* x! o, U! N3 v; s5 |. @  8 O9 L( _3 }- a' C$ s1 ]
  
( x7 O& Q& j0 R% s; m: o" i  
2 m7 {( x# ~: @" ]7 M. q  爬虫的进口URL是:http://www.tianya.cn/bbs/index.shtml8 o: H$ ?1 U3 V0 n
  同时,指定了爬虫的爬数据的编码,这个编码应该按照具体的页面编码来定,例如膳缦沔的进口页面的编码就是utf-8。其实,有良多的中文页面的编码是gbk或者gb2312,那么这个处所的编码就要响应设置,否则会呈现数据乱码。
; t# _( r2 n" Z5 ~  E  2. 界说数据的过滤轨则:5 C* b% x! `$ Z/ c" K
  ; P6 w& `- Q) p. y. A& w
  
. @' Z3 d( X* ]0 P) W4 I  
! `' g9 \# y9 E0 k% m  
) e8 ]5 U- H; m  
! y1 @+ m7 ^5 U1 K* e+ F+ V* d7 w: l- c  膳缦沔设置装备摆设就是按照XPath年夜爬得的数据中筛选合适的内容。这里需要获得所有的
7 {! r- i/ K3 r! a信息。有关XPath和XQuery的语法请网上发芽。3 P( ^7 z9 I) |7 k9 z" P6 j  T
  3. 最后一步就是措置数据。可以写入XML文件,也可以使用SetContextVar的体例把收集的数据塞到一个集结变量中,供Java代码挪用(好比:数据直接入库)。9 y+ g9 n, E, g0 \
  这里是直接写入XML文件,然后解析XML即可。  o4 n8 y9 E2 ]. `4 r
  注重下面的for轮回,这是XQuery的语法,供给遍历的功能。因为年夜版面小版块是一个树状结构,需要这种遍历。
, c0 ]' P* u, v  
) m- k' m# I% ~( m  {# j1 ~/ F0 c( P! P$ A
  for $row in $item//li return
( h& {; z( `4 T8 P9 r  8 R4 ~$ B* q. h
  }1 P! i3 g* i0 v3 \. X
  5 S9 o1 X) C) c- [- T
  相关的Java代码如下:; r) K4 d3 `4 p8 I
  String configFile="tianya.xml";
" M/ O+ g; P% h# _! m3 f# R$ m  ScraperConfiguration config = new ScraperConfiguration(configFile);* I2 |& l" ~+ y3 e7 T
  String targetFolder="c:\chenxinhan";/ X& y5 j4 M4 @: x' R& o3 N9 T0 |
  Scraper scraper = new Scraper(config,targetFolder);
2 l3 F2 A5 ?1 T) _  //设置爬虫代办代庖
$ C( l, c2 R8 K  c( d6 d  scraper.getHttpClientManager().setHttpProxy("218.56.64.210","8080");$ v% s* R6 Q* `
  scraper.setDebug(true);
6 K8 Z( G. D* P  scraper.execute(); </p>
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 16:21 , Processed in 0.202836 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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