由于mongodb的翻页使用的是skip,而不是limit start,end,所以计算的应该是每页应该skip的数据,以下分页工具可以完成mongodb的分页要求
#turn page util
class Paginator(object):
def __init__(self,total_records=None,per_page=None):
#total records
self.total_records = total_records
#perpage size
self.per_page = per_page
#total pages
self.total_pages = 0
#perpage skip infor
self.data={}
self.__judge__()
def __judge__(self):
#caculate total pages
if self.total_records>self.per_page:
self.total_pages = int(floor(self.total_records/float(self.per_page)))
self.data[1]=Page(self,page_number=1,skip=0)
for i in range(1,self.total_pages):
self.data[i+1]=Page(self,page_number=i+1,skip=self.data[i].skip+self.per_page)
#如果计算出来的页数不恰巧是个整数,那么还需要计算最后一页
if self.total_pages<(self.total_records/float(self.per_page)):
#计算最后一页,因为最后一页肯定是能全页显示的
self.data[self.total_pages+1]=Page(self,self.total_pages+1,skip=self.data[self.total_pages].skip+self.per_page)
else:
self.total_pages=1
self.data[1]=Page(self,1,skip=0)
def get_page(self,page_number):
page_number = int(page_number)
if page_number in self.data.keys():
return self.data[page_number]
else:
return None
#page
class Page(object):
def __init__(self,paginator,page_number=1,skip=0):
self.page_number=page_number
self.skip = skip
self.paginator = paginator
self.next_page_number = self.page_number+1
self.prev_page_number = self.page_number-1
def has_next(self):
return self.page_number<self.paginator.total_records/float(self.paginator.per_page)
def has_prev(self):
return self.page_number>1
def get_next_page(self):
return self.paginator.get_page(self.next_page_number)
def get_prev_page(self):
return self.paginator.get_page(self.prev_page_number)
分享到:
相关推荐
6.4 自动化测试工具-selenium搞定12306 .mp4 1019.2MB 6.3 自动化测试工具-selenium入门 .mp4 1.0GB 6.22 某易云下载案例1 .mp4 636.5MB 6.21 RSA加密解密以及案例1 .mp4 684.9MB 6.20 各种加密逻辑1 .mp4 826.1...
总结来说,本Python爬虫学习案例将带领我们深入理解如何使用Python爬虫技术抓取电商独立站的产品信息,包括自动翻页功能的实现,数据的提取、存储和分析。掌握这些技能不仅可以提升数据获取能力,也为后续的数据分析...
Python爬虫程序是数据获取的重要工具,尤其在信息丰富的互联网时代,它可以帮助我们自动化地从网站上抓取大量数据。本压缩包包含了针对163网易、百度、百度云、哔哩哔哩以及中国知网这五个不同平台的爬虫程序源代码...
- pymongo:Python的MongoDB驱动,MongoDB是一个非关系型数据库,它存储数据的方式是通过类似JSON的格式来组织,非常适合存储结构化或者半结构化的数据。 3. 环境配置:文章提到的开发环境是Ubuntu 16.04,Python...
6. **动态加载内容**:现代网页常使用AJAX技术动态加载内容,这需要我们使用Selenium等工具模拟浏览器行为,等待内容加载完成后再进行抓取。 7. **爬虫框架Scrapy**:Scrapy提供了一整套解决方案,包括请求调度、...
本文将详细介绍如何使用Python结合Selenium实现网页自动化抓取,并介绍如何与BeautifulSoup、MongoDB等工具协同工作,提高数据处理效率。 #### 二、Python Selenium简介 ##### 2.1 Selenium简介 Selenium是一个...
Selenium是一种Web自动化测试工具,能够模拟真实的浏览器操作,通过控制浏览器进行网页内容的获取与操作。Scrapy是一个高效的爬虫框架,用于快速开发爬虫程序。对于特定的场景,如本例中的气象数据爬取,可以通过...
- Python安装与配置 - 必要库的安装(如Requests、BeautifulSoup、Scrapy等) 3. **HTML与CSS选择器** - HTML基础 - CSS选择器详解 4. **数据解析与提取技术** - 使用正则表达式提取数据 - 使用BeautifulSoup...
### Python使用Selenium爬取淘宝异步加载的数据方法 #### 概述 本文将详细介绍如何使用Python中的Selenium库来爬取淘宝网站上通过异步加载显示的数据。由于淘宝页面结构较为复杂,直接通过解析Ajax请求或JavaScript...
在本知识点中,我们将会介绍如何使用Python语言结合Selenium、PyQuery等库,实现对淘宝商品列表信息按综合排序和销量排序的自动化抓取。本知识不仅涵盖如何编写代码实现自动化翻页,还涉及到异常处理、数据提取等...
Scrapy是一个强大的Python爬虫框架,它为网络数据抓取提供了高效的工具集,包括网页下载、解析、数据处理和存储等多个环节。以下是对标题和描述中提到的知识点的详细解释: 1. **Scrapy框架创建项目**:使用`scrapy...
6. **数据存储**:服务器接收到评论数据后,需要将其存储在数据库中,如MySQL、MongoDB或NoSQL数据库。同时,可能需要考虑如何处理重复评论,以及如何保持数据的一致性和完整性。 7. **安全和性能**:在实现过程中...
10. **数据分析**:通过集成Google Analytics或其他分析工具,可以追踪公告的点击率、曝光量等数据,帮助优化内容和提高用户参与度。 综上所述,首页滚动公告系统是一个涉及多方面技术的综合应用,从用户体验设计到...
在IT行业中,网络爬虫是数据获取的重要工具,特别是在电商领域。Scrapy是一个强大的Python爬虫框架,广泛用于高效地抓取网页数据。本项目聚焦于利用Scrapy框架设计一个Spider,来抓取京东网站上的商品价格等关键信息...
后端可能使用了如Java、Python或PHP等服务器端语言,搭配数据库管理系统如MySQL或MongoDB存储小说数据。前端可能采用了React、Vue.js或Angular等前端框架,提供高性能的用户体验。 二、功能特性 1. 内容管理:系统...
前端部分主要负责用户界面的展示和交互,包括漫画的展示、翻页效果、搜索功能、分类浏览等。开发者可能使用了微信小程序的开发框架,如WXML和WXSS进行页面布局和样式设计,以及JavaScript进行逻辑处理。通过微信...
常见的后端技术有Node.js、Python的Django或Flask框架、Java的Spring Boot等,它们能够处理用户的请求,如登录、获取动漫列表、章节内容等,并将数据以JSON格式返回。为了存储和管理大量的动漫资源,数据库系统如...
这涉及到后端开发技术,如Java、Python或Node.js,以及数据库设计(如MySQL、MongoDB等)。同时,需要理解前后端交互机制,如AJAX或WebSocket。 5. **教育软件设计**:英语绘本听读小程序需要考虑到用户体验和教育...
2. 选择合适的库:Python是爬虫开发的常用语言,拥有如BeautifulSoup、Scrapy等强大的库支持。BeautifulSoup用于解析HTML文档,提取所需数据;Scrapy则是一个完整的框架,可以更高效地管理爬虫项目,包括请求调度、...