起先是扒了一个包, 动态分页的, 但这个包分页之前要加载全部的数据, 我这东西后台是个爬虫, 不一定浏览的完所以这么做有点浪费资源, 于是我改造了一下.
- # :param obj_count: 获得 条目总数
- # :param obj_perpage: 定义 每页显示条目数
- # :param pagetag_current: 获得 当前页码
- # :param pagetag_dsp_count: 定义 显示多少个页码
这是包的参数 根据这些实现分页
obj_count = len(你的数据)
之前我是爬完所有数据传进来, 现在改成直接爬总条目.
obj_count = 总条目
然后之前给页面的值是这样
obj = 你的数据[xx.obj_slice_start:xx.obj_slice_end]
xx.obj_slice_start 和 xx.obj_slice_end 就是通过切片给页面传递值
我看了下代码, 这俩参数是通过当前页码 - 1 * 条目数, 当前页码 * 条目数获得的.
比如说每页 20 条, 当前第 2 页, 就是你的数据 [2-1*20:2*20] 这样.
但我改完之后因为这个时候还没有数据, 所以不能这么用.
obj = get_data(page_list[int(pagetag_current) - 1])
这是改完之后的, 自己那俩函数就不贴了, 写的比较丑.
思路就是 page_list 里边是爬取目标的所有分页, 根据 pagetag_current 也就是当前页码作为下标 (0 起所以 - 1) 确定爬取的页面, 然后用 get_data 爬取这个页面.
最后出问题了, 排查发现是我搞错了每页的显示条目, 我设定的是 20, 但 page_list 里每一页展示的是 25 条, 所以比如说总条目 69, 会分成 4 页, 但我 page_list 里只有 3 页, 就是 3 个元素,
加载尾页会直接越界 pagetag_current=4(尾页)(get_data(page_list[pagetag_current) - 1 也就是 3 提示越界 实际只有 0 1 2])).
解决方式就是每页显示的条目数 = 25, 然后想了一下, 原作者那种方式应该也会面临越界问题, 比如总条目 69(为什么总要用 69 做例子 因为我喜欢 你懂得), 用他切片的方式就是 0:20 20:40 40:60 60:80
还是大牛想的多, 不像我碰到问题才去琢磨处理(虽然最后那不算处理).
赶紧去看看他的代码学习一下怎么处理的, 翻了 2 遍也没找到处理越界的地方, 最后疑惑的加了输出测试了一下, 居然就是直接给的越界下标, 查了一下, 我擦, 原来切片越界是不报的.
不管咋说, 也算是学了点新东西, 虽然这个动态分页还是不够完美, 但也算改造成功了, 加载一页爬一页数据, 不像之前分页前就得爬完所有数据, 不好地方就是现在每页显示的条目要根据爬取页面的一致. 下一步计划把 get_data 写的智能一些, 可以精准的获取数据.
来源: http://www.bubuko.com/infodetail-2862614.html