六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 39|回复: 0

使用web-harvest抓取分页数据(二)

[复制链接]

升级  90%

11

主题

11

主题

11

主题

童生

Rank: 1

积分
45
 楼主| 发表于 2013-2-3 10:33:09 | 显示全部楼层 |阅读模式
除了使用上述方法外,还可以使用将不页的数据输出到不同的结构化好的XML文件里面,

然后再进行读取的方法:

    配置文件:

     <var-def name="targetUrl">http://www.51zyr.com/tpl/index/hotel_list_web.do</var-def>               <var name="page_num"/>                <file action="write" path="hotel_page${page_num}.xml">                         <template>              <![CDATA[ <root> ]]>          </template>                            <loop item="item" index="i">          <list>             <xpath expression="//table[@background='../images/dotline.gif'][1]/tbody/tr">                <html-to-xml>                   <http url="${targetUrl}?pages=${page_num}"/> //这里根据从JAVA文件传过来的参数进行不同页面的查询抓取                </html-to-xml>            </xpath>                    </list>          <body>                     <xquery>                    <xq-param name="item">                        <var name="item"/>                    </xq-param>                    <xq-expression><![CDATA[                        declare variable $item as node() external;                                                let $num := data($item//td[1])                        let $name := data($item//td[2])                        let $star := data($item//td[3])                        let $address := data($item//td[4])                        let $telephone := data($item//td[5])                            return                                <hotel>                                    <num>{data($num)}</num>                                    <name>{data($name)}</name>                                    <star>{data($star)}</star>                                    <address>{data($address)}</address>                                    <telephone>{data($telephone)}</telephone>                                </hotel>                    ]]></xq-expression>                </xquery>                         </body>        </loop>         <![CDATA[ </root> ]]>             </file>        

   接着是JAVA文件里面的关键代码:

    public void QueryPath(int num) {   try{    ScraperConfiguration config = new ScraperConfiguration("traveldata/config/hotel.xml");        Scraper scraper = new Scraper(config, "traveldata/output/hotel");                scraper.addVariableToContext("page_num", new String(""+num));             scraper.setDebug(true);        long starttime = System.currentTimeMillis();        scraper.execute();        long endtime = System.currentTimeMillis();        System.out.println("Spent time:"+(endtime - starttime));                  saveHotel(num);           }   catch(Exception e)   {   e.printStackTrace();   }}  public void getContent(int pageNum)  //循环调用{for(int i=1;i<=pageNum;i++){QueryPath(i);}}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

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