论坛首页 Java企业应用论坛

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

浏览 3660 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-14  
   除了使用上述方法外,还可以使用将不页的数据输出到不同的结构化好的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);
		}
	}

   发表时间:2008-11-01  
这些循环操作,可以全部写在XML文件中。
不然又要写java代码,又要考虑xml文件
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics