请选择 进入手机版 | 继续访问电脑版

蓝天采集社区

 找回密码
 立即注册
搜索
热搜: 采集 cms
开启左侧

示例教程:文章分页

[复制链接]
admin开发者 发表于 2019-10-7 16:27:32 | 显示全部楼层 |阅读模式
有些文章内容太长会采用分页模式来显示,以文章“http://shili.skycaiji.com/article/news/pg/id/20.html”为例
首先我们在“采集器设置》获取内容》内容分页”中开启分页
文章一般都是正文有分页,我们将“正文”字段添加为“分页内容字段”

fenye1.png

文章页面图片:

fenye2.png

图中我们可以看到有4种分页形式:完整分页、上下分页、完整分页JS模式和上下分页JS模式

分页连接的格式为:article/news/pg/id/数字.html?page=数字

通过“测试》分析网页”功能获取到各个分页区域的xpath:
  • 完整分页://*[@id="page_list"]/li[1]
  • 上下分页://*[@id="page_list"]/li[3]
  • 完整分页JS模式://*[@id="page_list"]/li[2]
  • 上下分页JS模式://*[@id="page_list"]/li[4]

以上xpath值可以在“内容分页》获取分页区域”中设置以获取固定区域的分页链接,否则将获取整个页面的分页链接

分页链接规则:
完整分页和上下分页直接通过a标签获取链接即可:
  1. <a href="[内容1]">
复制代码

JS模式分页通过查看源码发现链接格式为:
  1. <a onclick="javascript:page('网址');">
复制代码


fenye3.png

使用规则匹配出分页链接:
  1. <a onclick="javascript:page\('[内容1]'\);">
复制代码

因为JS模式不能自动补全网址,所以要在“拼接成最终分页链接”中填写:
  1. http://shili.skycaiji.com[内容1]
复制代码

为了防止匹配到非分页链接,在“内容分页》分页网址过滤》必须包含”中填写“page=”,精准一些则用“article/news/pg/id/\d+\.html\?page=\d+”

我们测试下“完整分页JS模式”的链接抓取

fenye4.png


“测试》抓取分页”效果

fenye5.png


注意:很多网站由于程序问题会出现2种格式的文章首页链接,比如示例中的文章首页链接为:http://shili.skycaiji.com/article/news/pg/id/20.htmlhttp://shili.skycaiji.com/article/news/pg/id/20.html?page=1(从第二页开始文章首页为该链接),这2个链接内容是一样的会导致文章首页重复抓取
解决方法:在“内容分页》分页网址过滤》不能包含”中填写“page=1$”即排除掉第一页链接

常见问题:
  • 上下页模式每次只能抓取一个分页链接能采集完整吗?可以的,程序会根据下一页自动抓取到最后一页,可以用“测试》抓取字段”看看数据是否抓取完整
  • 如果分页链接顺序打乱了,文章分页内容会乱吗?不会的,程序自动根据分页编号排序,会按照正常分页顺序采集内容
  • 最大分页数是怎么回事?是为了防止出现死循环,当实际分页数不超过最大分页数时使用实际分页数,超过最大分页数时使用最大分页数



回复

使用道具 举报

南山i 发表于 2019-11-11 06:38:32 | 显示全部楼层
为什么只采集第一个分页


抓取分页那都能获取到所有分页  还是只采集到了第一页
回复 支持 反对

使用道具 举报

南山i 发表于 2019-11-11 06:57:32 | 显示全部楼层
南山i 发表于 2019-11-11 06:38
为什么只采集第一个分页

@admin @admin @admin
回复 支持 反对

使用道具 举报

jscmcc 发表于 2020-1-9 15:53:55 | 显示全部楼层
本帖最后由 jscmcc 于 2020-1-9 15:56 编辑

请求大佬帮忙如何解决这类分页问题?
微信图片_20200109155226.png
返回数据源码:
  1. <div class="qmanu">共  
  2. 19324  页  386466条  记录
  3.       
  4.         <a href="#" onclick="goPage('first');return false;">首页</a>  
  5.                                                                           <a href="#" onclick="goPage('previous');return false;">上一页</a>
  6.    2      
  7.         <a href="#" onclick="goPage('next');return false;">下一页</a>   
  8.                                                                           <a href="#" onclick="goPage('last');return false;">末页</a>

  9.   
  10. <font class="9ptb">转到第<input type="text" id="pageNum" value="2" style="width:30px;font-size:12px;line-height:14px">页
  11. <input style="font-size:12px;line-height:15px" type="submit" value="提交" onclick="goToPage();"></font>
  12. </div>
复制代码
js:
  1. <script type="text/javascript">       
  2.    function publicInformation(){
  3.                    var publicInformation = "1";
  4.                    if(publicInformation!="1"){
  5.                            document.getElementById("publicInformationForm").submit();
  6.                    }
  7.    }
  8.    function goPage(optType){
  9.                     switch(optType){
  10.                                 case 'first':
  11.                                   $("#pageNo").val(1);
  12.                                   break;
  13.                                 case 'previous':
  14.                                   $("#pageNo").val(parseInt($("#pageNo").val())-1);
  15.                                   break;
  16.                                 case 'next':
  17.                                   $("#pageNo").val(parseInt($("#pageNo").val())+1);
  18.                                   break;
  19.                                 case 'last':
  20.                                   $("#pageNo").val(19324);
  21.                                   break;
  22.                                 default:
  23.                                   $("#pageNo").val(1);
  24.             }
  25.             $("#publicInformationForm").submit();
  26.     }
  27.         function goToPage(){
  28.                    var pageNum = $("#pageNum").val();
  29.                    $("#pageNo").val(pageNum);
  30.                    $("#publicInformationForm").submit();
  31.         }
  32.        
  33.     function doSerach(){
  34.             $("#serviceForm").submit();
  35.     }
复制代码

        

回复 支持 反对

使用道具 举报

dodd001 发表于 2020-4-15 15:56:25 | 显示全部楼层
本帖最后由 dodd001 于 2020-4-16 08:24 编辑

我也是同样的问题,抓取了所有分页也是成功的,但只匹配第一页,同样的规则用火车头就可以

我找到原因了,他这个分页原理必须分页中有下一页的链接才行,不像火车头,他是取所有分页链接,然后按分页网址采集
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|蓝天采集社区

GMT+8, 2020-12-3 00:08 , Processed in 0.023826 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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