爬虫程序如何处理动态分页?

零崎莲实
  • 683

这里说的动态分页是指使用ajax等技术实现的不改变页面URL,而改变页面内容
分页代码如下

<div class="page-class" id="page-bar">
 <form method="get" action="/comment.php" name="selectPageForm">
 <div id="pager">
 总计 12405 个记录,共 870 页 <span> <a href="javascript:gotoPage(1,9999,0)">第一页</a> <a href="javascript:;">上一页</a> <a href="javascript:gotoPage(2,9999,0)">下一页</a> <a href="javascript:gotoPage(870,9999,0)">最末页</a> </span>
 </div>
 </form>
</div>
function gotoPage(page, id, type)
{
  comment_current = page;
  Ajax.call('/comment.php?act=gotopage', 'page=' + page + '&id=' + id + '&type=' + type, gotoPageResponse, 'GET', 'JSON');
}

我使用的是nodejs环境,用cheerio解析
请问我该如何获取这些动态页每页的信息呢?
谢谢

回复
阅读 6.3k
3 个回答
  1. 思路一,一般情况下分页对应的请求url会带有pageIndex(页码)等参数,确定这一规则后可以递推出每一页的url规则。边界判断可以直接从页面拿到最后一页的页码或者通过总数量和页面最大数量计算,甚至你也可以通过http的错误码或者错误页的内容判断。

  2. 思路二,直接模拟用户行为(假设是点击时间,超链接跳转),则每次我们抓取当前页面内容的同时,可以同时抓取下一页的链接,依次抓取。(注意做边界的限制)

  3. 思路三,抽链(这也是搜索引擎的做法之一),抓取整个页面(或者局部区域)的所有链接,作正则匹配过滤,保留有效的分页url,进行url排重。然后,抓取内容(当然这两者可并行)

暂时先说一下这几点思路。

你可以用Chrome的开发人员工具获取一下JS的访问内容(以及URL),然后去抓这些动态的内容。
你不能用Cheerio获取到这些动态内容,因为Cheerio只是用作XML/HTML解析的。

洋仔1234
  • 2
新手上路,请多包涵

获取第一页的时候 正则匹配出来 “共 870 页” /共 (d+) 页/ 就能知道一共有多少页
然后用页码替换链接中的页数 就可以爬取每页的信息了

宣传栏