关于不可控肉鸡爬虫列表的页码问题解决方案

在列表爬取时,经常存在分页问题(某一页采集失败),为了避免资源浪费,我们不可能再从第一页开始采集;那么每个采集成功的页码进行标识就很有必要了,在所需采集页码数少的情况下我们可以通过给采集任务表添加上每个页码的字段,在对应页码采集成功的时候更新采集完成时间,但在页码数多的情况下(如采集淘宝某关键词前100页的产品)该方法就不切实际了;

我采用的思路是通过0和1来标识对应顺序的页码是否采集成功;
如现在需要采集前10页,那么初始化页码标识就是10个0的字符串;(下面案例使用的是php语言)

// 初始化页码标识,不够位数的用0填充
$page_init = str_pad(0,10,'0',STR_PAD_LEFT);
$pages = str_split($page_init);// 将字符串转换为数组
$pagesLength = count($pages);
for($ii = $pagesLength - 1;$ii >= 0;$ii--){
	if($pages[$ii] == 0){
		// 如果值为0则还未采集成功,可以取走任务页码
		$currentPage = $pagesLength - $ii;// 当前页码
		# code... 后面就是你要采集的url拼接方法了
	}
}
// 以上就是任务分派的页码逻辑;

下面开始处理采集返回的数据(处理采集成功的页码前需要大家先了解下或运算的规则)

运算规则:
0|0=0; 0|1=1; 1|0=1; 1|1=1; 即 :参加运算的两个对象,一个为1,其值为1。 例如:3|5 即
00000011 | 0000 0101 = 00000111,因此,3|5=7。

/* 
首先获取当前返回的采集任务id和采集的页码$page;
再通过id获取到页码标识如$page_flag;
$page_flag 页码标识
$maxPage 	采集条件里定的最大采集页数
bindec()	函数是将二进制转为10进制
$limit 		是采集里每页的产品数
$count 		是该搜索关键词的总产品数,如果总产品数只有5页但我们规定要采10页肯定采集不到的所以也要更新采集成功了;
*/
$page_flag = #你的查询语句,获取出页码标识
// 对页码数进行或运算
$page_flag = $page_flag|pow(2,$page-1);// 或运算(页码为对应的第几位的1)
// 接着判断是否已经采集完了;采集完成的规则是:完成了规定的页码数或实际总产品数小于我们规定的采集数
if($page_flag == bindec(str_pad(1, $maxPage,1,STR_PAD_LEFT))  || $page * $limt >= $count){
	#code... 下面就是你处理采集成功的更新机制了,当前不再派发该任务了
}else{
	#code... 将该任务的的page_flag字段值设置为$page_flag
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值