抓取js分页网站xml配置问题

天王盖地虎_820 发布于 2013/08/15 10:45
阅读 314
收藏 1

@自风 你好,想跟你请教个问题:

抓取某个网站只能获得第一页的数据,我贴出xml你看下。

<?xml version="1.0" encoding="UTF-8"?> 
<beans> 
 <site name="chealth" enable="1" includeHttps="1" url=" http://www.chealth.org.cn/mon/healthNews/article/healthNews_index1.html" 
       reqDelay="1s" charset="utf-8" schedule="1h" thread="2" waitQueue="10s"> 
  <!-- 
  <seeds> 
   <seed name="" url="" /> 
  </seeds> 
  <validHosts> 
   <validHost value="" /> 
  </validHosts> 
   --> 
  <!-- 
  <headers> 
   <header name="" value="" /> 
  </headers> 
  <cookies> 
   <cookie name="" value="" host="" path="" /> 
  </cookies> 
  --> 
  <queueRules policy="and"> 
   <rule type="!regex" value="^.*\.(jpg|png|gif)$" /> 
  </queueRules> 
  <!-- 
    | 抓取目标 
  --> 
  <targets> 
   <sourceRules policy="and"> 
    <rule type="regex" value=" http://www.chealth.org.cn/mon/healthNews/article/healthNews_index(\d+)\.html"> 
     <digUrls> 
      <field name="source_url" isArray="1"> 
       <parsers> 
        <parser xpath="(//div[@class='yahoo2']//a[@onclick])[loadpage(\d+)]" attribute="href"/> 
       </parsers> 
      </field> 
      <field name="target_url" isArray="1"> 
       <parsers> 
        <parser xpath="//ul[@class='Date']//li//a[@href]" attribute="href"/> 
       </parsers> 
      </field> 
     </digUrls> 
    </rule> 
   </sourceRules> 
    
   <target name="article" isForceUseXmlParser="1"> 
    <urlRules policy="and"> 
     <rule type="regex" value=" http://www\.chealth\.org\.cn/mon/healthNews/article/\w[^_]+\.html" /> 
    </urlRules> 
    <model isIgnoreComments="1"> 
     <!-- 
     <namespaces> 
      <namespace prefix="" uri="" /> 
     </namespaces> 
     --> 
     <field name="title"> 
      <parsers> 
       <parser xpath="//div[@class='main_box']//div[@class='left']//h1//text()"/> 
      </parsers> 
     </field> 
     <field name="content" isAlsoParseInNextPage="1" isTrim="1"> 
      <parsers> 
       <parser xpath="//div[@class='overview']" exp="$output($this)" /> 
       <!--attribute 黑名单--> 
       <parser exp="$Attrs.xml($this).rm('class').rm('style').rm('width').rm('height').rm('usemap').rm('align').rm('border').rm('title').rm('alt').ok()" /> 
       <!--tag 黑名单,去掉内嵌内容--> 
       <parser exp="$Tags.xml($this).rm('map').rm('iframe').rm('object').empty().ok()" /> 
       <!--tag 白名单,保留的标签,除此之外都要删除(不删除其他标签内嵌内容)--> 
       <parser exp="$Tags.xml($this).kp('br').kp('h1').kp('h2').kp('h3').kp('h4').kp('h5').kp('h6').kp('table').kp('th').kp('tr').kp('td').kp('img').kp('p').kp('a').kp('ul').kp('ol').kp('li').kp('td').kp('em').kp('i').kp('u').kp('er').kp('b').kp('strong').ok()" /> 
       <!--其他--> 
      </parsers> 
     </field> 
     <!-- 
     <field name="author"> 
      <parsers> 
       <parser xpath="//div[@class='stat']//a[@target='_blank']/text()"/> 
      </parsers> 
     </field> 
     <field name="tags" isArray="1"> 
      <parsers> 
       <parser xpath="//div[@class='Tags']//a/text()"/> 
      </parsers> 
     </field> 
     <field name="answers" isArray="1"> 
      <parsers> 
       <parser xpath="//li[@class='Answer']//div[@class='detail']/text()" /> 
      </parsers> 
     </field> 
      --> 
    </model> 
   </target> 
  </targets> 
  <!-- 
    | 插件 
  --> 
  <plugins> 
   <plugin enable="1" name="spider_plugin" version="0.0.1" desc="这是一个官方实现的默认插件,实现了所有扩展点。"> 
    <extensions> 
     <extension point="task_poll"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.TaskPollPointImpl" sort="0"/> 
     </extension> 
     <extension point="begin"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.BeginPointImpl" sort="0"/> 
     </extension> 
     <extension point="fetch"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.FetchPointImpl" sort="0"/> 
     </extension> 
     <extension point="dig"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.DigPointImpl" sort="0"/> 
     </extension> 
     <extension point="dup_removal"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.DupRemovalPointImpl" sort="0"/> 
     </extension> 
     <extension point="task_sort"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.TaskSortPointImpl" sort="0"/> 
     </extension> 
     <extension point="task_push"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.TaskPushPointImpl" sort="0"/> 
     </extension> 
     <extension point="target"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.TargetPointImpl" sort="0"/> 
     </extension> 
     <extension point="parse"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.ParsePointImpl" sort="0"/> 
     </extension> 
     <extension point="end"> 
      <impl type="" value="org.eweb4j.spiderman.plugin.impl.EndPointImpl" sort="0"/> 
     </extension> 
    </extensions> 
    <providers> 
     <provider> 
      <orgnization name="CFuture" website=" http://lurencun.com" desc="Color your future"> 
       <author name="weiwei" website=" http://laiweiweihi.iteye.com | http://my.oschina.net/laiweiwei" email=" l.weiwei@163.com" weibo=" http://weibo.com/weiweimiss" desc="一个喜欢自由、音乐、绘画的IT老男孩" /> 
      </orgnization> 
     </provider> 
    </providers> 
   </plugin> 
  </plugins> 
 </site> 
</beans> 

 

 我觉得应该是source_url的问题,另外请问下这里的source_url和target_url表达什么意思?

加载中
0
自风
自风

分析了下你要抓取的页面,再对比你的配置,需要修改如下:


  1. sourceRules的规则是正则表达式,需要把.改成\.
    http://www\.chealth\.org\.cn/mon/healthNews/article/healthNews_index(\d+)\.html

  2. 你的source_url配置无法生效,分析目标网站的sourceUrl页面源码,发现该页面有个隐藏input域保存了当前页码和最大的页码,我这里只取了当前页码然后+1来拼接下一页的URL:
    <!--下一页码-->
    <field name="next_page_num" isParam="1">
    	<parsers>
    		<parser xpath="//input[@id='jquery_current_page']" attribute="value" />
    		<parser exp="$Util.toInt($this)+1" />
    	</parsers>
    </field>
    <field name="source_url">
    	<parsers>
    		<parser exp="'http://www.chealth.org.cn/mon/healthNews/article/healthNews_index'+$fields.next_page_num+'.html'" />								
    	</parsers>
    </field>

  3. 以下是我本地跑测试得到的部分结果,发现分页的数据都能抓取了:

0
自风
自风

1.source_url即来源页面。比如你要抓取某篇新闻,那么新闻列表页就是这篇新闻的来源页面了。

2.target_url即目标页面,上述的某篇新闻就是目标页面。

天王盖地虎_820
天王盖地虎_820
麻烦看下 我上面配置的xml 的source_url写的是否正确,因为那个网站是js分页的
返回顶部
顶部