因为淘宝对抓取次数由限制,故在抓取的过程中要被打断多次,每次都需要手动更改循环初始参数非常麻烦,所以试着保存程序最后处理状态,在下次运行程序时可以直接读取最后的处理状态。
首先在每次循环的最后加入保存状态的语句
1 2 3 4 5 6 7 8 9 |
//更新缓存状态参数 $oMySQL->ExecuteSQL(" UPDATE `cache` SET `value`= '".$i."' WHERE `name`= 'last-update-shop-num' "); |
然后在循环开始前对循环初始变量进行判断
先读取数据库中保存的状态
1 2 3 4 5 6 7 |
//获取缓存数据 $rel = $oMySQL->ExecuteSQL(' SELECT * FROM `cache` WHERE `name` = "last-update-shop-num" LIMIT 0 , 1 '); |
然后与数据库中的店铺总数进行对比
1 2 3 4 |
if( $cache['value'] < $count ) $i = $cache['value']; else $i = 0; |
如果中断时已经到达最后一个店铺,则重置计数器到第一个店铺,否则从上一次的中断点开始继续抓取。
但是这样有一个问题,就是暂时还无法保存分页状态,于是决定用”-“来作为分隔符,将分页和店铺状态保存在一个value里。比较特殊的是除了在店铺处要判断一次外,在进行分页的时候也要进行判断。分页处的判断还要考虑计数器重置的影响。
加入分页后,相关语句改为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//店铺判断 $last_shop_num = explode('-', $cache['value']); if( $last_shop_num[0] <= ($count-1) ) $i = $last_shop_num[0]; else $i = 0; //分页判断 if( $last_shop_num[1] <= $page_total ) $j = $last_shop_num[1]; else $j = 1; //更新缓存状态参数 $oMySQL->ExecuteSQL(" UPDATE `cache` SET `value`= '".$i.'-'.$j."' WHERE `name`= 'last-update-shop-num' "); |
最后结果,已经能够在重新打开后自动从上次被屏蔽的地方开始继续抓取了
There are no comments yet