Python 请求分页

文章目录

    • 什么是 Python 中的分页
    • 带有下一个按钮的 Python 分页
    • 没有下一个按钮的 Python 分页
    • 无限滚动的 Python 分页
    • 带有加载更多按钮的分页


在本文中,我们将了解分页以及如何克服 Python 中与分页相关的问题。 读完本文后,我们将能够了解 Python 分页以及如何使用它处理问题。


什么是 Python 中的分页

使用任何 Web 应用程序时,最重要的是显示的内容不仅限于并强制适合单个页面。 不过,它应该显示在多个页面上,这有助于获得更好的用户体验。

这种将内容分布在多个页面上的过程称为分页。 必须记住,在实施分页概念时,我们应考虑总页数、内容类型、所讨论主题的分类表示以及页面所遵循的数字顺序等因素。


带有下一个按钮的 Python 分页

分页并不总是限于用户看到的内容,即网站的前端,但有时对后端使用的 API 进行分页也很重要。 我们可以使用几个 Python API 和模块来处理分页问题。

我们将从使用请求模块开始。 此外,如果我们有兴趣从网页中查找内容,我们将使用 BeautifulSoup4。

此外,我们将使用 lxml 库来方便地访问上述模块。

示例代码:

pip install requests beautifulsoup4 lxml

上面的行将帮助我们通过 beautifulsoup4 库安装请求模块。

import requests
from bs4 import BeautifulSoup
findurl = 'http://books.toscrape.com/catalogue/category/books/fantasy_19/index.html'
getresponse = requests.get(findurl)
getsoup = BeautifulSoup(getresponse.text, "lxml")
footer_element = getsoup.select_one('li.current')
print(footer_element.text.strip())

输出:

Page 1 of 3

前面的代码片段将帮助我们从代码中给出的网页 URL 中捕获页脚。 您可以根据需要更改 URL。

请求库在 URL 上发送一个获取请求。

对于 soup 对象,我们使用 CSS 选择器。 例如,如果我们想移动到另一个元素,我们可以在 soup.select_one(name) 中输入名称。

上面的代码适用于包含下一步导航按钮的网页。 除了这种情况,对于使用无限滚动和加载更多按钮的网站,也可以在没有下一个按钮的情况下完成分页。


没有下一个按钮的 Python 分页

一些网站使用 1、2、3、4 等数字在不同页面之间滚动,而不是下一步按钮。 这使用户更容易在多个页面之间导航。

在这种情况下,我们将尝试从第一页检索数据,然后使用循环进行导航。

示例代码:

# Handling pages with the Next button
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
def process_pages():
    get_url = 'https://www.test.com/doc/791526.Zaloz-zbroje'
    response = requests.get(get_url)
    soup = BeautifulSoup(response.text, 'lxml')
    page_link_el = soup.select('.pgr_nrs a')
    # process the first page
    for link_el in page_link_el:
        link = urljoin(get_url, link_el.get('href'))
        response = requests.get(link)
        soup = BeautifulSoup(response.text, 'lxml')
        print(response.url)
        # process remaining pages
if __name__ == '__main__':
    process_pages()

输出:

https://www.test.com/doc/791526.Zaloz-zbroje/2
https://www.test.com/doc/791526.Zaloz-zbroje/3
https://www.test.com/doc/791526.Zaloz-zbroje/4

无限滚动的 Python 分页

顾名思义,在这种类型的分页中,我们没有下一个按钮或页码,而是不断滚动以查看所需的内容。

这种分页的一个简单示例可以是任何电子商务网站。 我们一次显示一定数量的产品,向下滚动后,我们将显示下一个产品。

必须记住,在这种情况下,我们不必处理多页 URL。

对 API 的异步调用将帮助我们在移动时获得更多内容。


带有加载更多按钮的分页

这种分页方法类似于无限滚动方法,但只有当我们想知道如何移动到下一页时才会有所不同。

在这种情况下,我们有一定数量的请求要完成,只要我们点击加载更多按钮,这些请求就会不断减少。 例如,网站上的图片总数为 500,我们一次显示 30 张图片。

因此,每次单击“加载更多”按钮时,我们都会看到接下来的 30 张图像,并且计数器会从总共 500 张图像中减去这 30 张。 让我们考虑下面的示例以便更好地理解。

示例代码:

import requests
from bs4 import BeautifulSoup
url = 'http://test.org/wp-json/smthstapi/v1/objects?tag=938&page={}'
null=0
page_counter = 1
while True:
    getresponse = requests.get(url.format(page_counter), headers=null)
    data = getresponse.json()
    # Process data
    # ...
    print(getresponse.url)  # only for debug
    if data.get('remaining') and int(data.get('remaining')) > 0:
        page_counter += 1
    else:
            break

输出:

https://test.org/wp-json/smthstapi/v1/objects?tag=938&page=1
https://test.org/wp-json/smthstapi/v1/objects?tag=938&page=2
https://test.org/wp-json/smthstapi/v1/objects?tag=938&page=3
https://test.org/wp-json/smthstapi/v1/objects?tag=938&page=4
https://test.org/wp-json/smthstapi/v1/objects?tag=938&page=5
https://test.org/wp-json/smthstapi/v1/objects?tag=938&page=6
https://test.org/wp-json/smthstapi/v1/objects?tag=938&page=7
...

上面的代码将继续打印相同的 URL 并递增页码,直到我们到达可用页面的末尾。 对于上面的代码,总页数是 34。

我们希望您发现本文有助于理解 Python 中分页的概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/29822.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

经典目标检测YOLO系列(1)YOLO-V1算法及其在VOC2007数据集上的应用

经典目标检测YOLO系列(1)YOLO-V1算法及其在VOC2007数据集上的应用 1 YOLO-V1的简述 1.1 目标检测概述 ​ 目标检测有非常广泛的应用, 例如:在安防监控、手机支付中的人脸检测;在智慧交通,自动驾驶中的车辆检测;在智…

Parallel Desktop中按照的centos在切换root用户时,密码正确,但一直切换不成功,显示su: Authentication failure

目录 一、出现问题二、分析问题三、解决问题四、参考资料 一、出现问题 我的密码明明是输入正确的,但又一直给我报下面的错误 二、分析问题 我怀疑是我密码记错了,所以我点击Log Out,重新去输入了一下密码,发现是正确的我确认…

Build your own unconditional confidence

不要活在既定的社会价值体系中 人类的偏好大多数时候都是愚昧的 I play whatever gods give me 情绪价值稳定 解决问题的能力 Dont label yourself 真正的强者不会吝啬对他人的赞美 敬畏自然,敬畏未知事物 核心是你对这个事情是否感兴趣,觉得有价…

PHP 使用html创建PDF并设置水印

使用TCPDF库给PDF文件加水印,需要注意无法直接使用文本,需要创建水印图片后,通过图片来设置水印效果。 目录 创建PDF 创建合同模板 创建pdf文件 简单创建 设置文档信息 去掉默认页头脚 设置间距 设置字体支持中文 设置图片比例因子 …

代理ip数据采集的优缺点

随着互联网时代的到来,数据已经成为企业发展和决策的关键。但是,不同的网站它对于数据访问的限制和反爬虫措施却是给企业的数据采集带来了挑战。针对这一问题,代理IP数据采集技术应运而生。但是使用代理ip来进行数据采集也有优缺点。 一、代理…

【微信小程序】wxml、wxss、js、json文件介绍

😉博主:初映CY的前说(前端领域) ,📒本文核心:微信小程序的入门介绍 【前言】书接上回,我们知道了一个小程序的构成结构,接下来我们来进一步学习小程序的目录结构中的.wxml、.wxss、.js、.json。 目录 ⭐ 一…

List容器(Java)

文章目录 1.容器介绍1.1 容器接口结构1.2 简单解析 2. List容器创建(Member functions)3. 访问操作(Element access)3.1 get()3.2 Iterator遍历3.3 增强for循环 4. 修改操作(Modifiers)4.1 add()4.2 addAll()4.3 remove()4.4 set() 5. 容量操作(Member functions)5.1 clear() …

傻白入门芯片设计,形式化验证方法学——AveMC工具学习(二十)

目录 一、形式验证方法学 (一)什么是形式化验证? (二)与传统验证的区别? 二、AveMC工具学习 (一)什么是AveMC? (二)AveMC的工作逻辑&#x…

Redis整合jedis 学习

前言 redis简单来讲是内存数据库,因为是将数据存放到内存,因此读写速率高快(传统数据库,不是先从内存转到硬存,慢) 1.jedis连接Redis redis是java操作redis的客户端,通过他我们能通过java语句操控redis。 jedis对于…

全国大数据与计算智能挑战赛:面向低资源的命名实体识别基线方案,排名13/64,组织单位:国防科技大学系统工程学院(大数据与决策实验室)

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…

一起学SF框架系列6.1-模块core-Resource

Java虽然提供了java.net.URL类和各种URL前缀处理程序来负责处理对各种资源的访问,但对于低级别资源的访问来说还是不够充分。例如,没有标准化的实现可用于访问需要从类路径中获取或者相对于一个ServletContext的资源;也没有检查所指向的资源是…

Linux 正则表达式

正则表达式有什么用&#xff1f;最基本的爬虫会用到&#xff0c;正则表达式简单来说就是匹配字符串的 比如&#xff1a;你匹配所有图片的链接地址 <img src"------(图片链接地址)"> 比如、abc/def URL:在WWW上&#xff0c;每一信息资源都有统一的且在网上…

(opencv)图像几何变换——缩放

图像缩放是指将图像的尺寸变小或变大的过程&#xff0c;也就是减少或增加源图像数据的像素个数。图像缩放一定程度上会造成信息的丢失&#xff0c;因此需要考虑适宜的方法进行操作。 下面介绍两种常用的图像缩放方法的原理及实现 1.基于等间隔提取图像缩放 等间隔提取图像缩…

机器视觉初步5-1:图像平滑专题

在计算机视觉领域&#xff0c;图像平滑处理是一个重要的任务&#xff0c;用于降低噪声&#xff0c;提高图像质量。常见的图像平滑算法有均值滤波、中值滤波、高斯滤波等。本文将介绍这些算法的原理&#xff0c;并分别给出使用Python与Halcon实现的代码。&#xff08;当前版本&a…

什么是微软的 Application Framework?

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来看一下什么是微软的 Application Framework&#xff1f; 到底什么是 Application Framework&#xff1f; 我当年学习这个的时候也困惑了好久&#xff0c;于是一直在搜索这个概念有没有好的解释&#…

ChatGPT时代:ChatGPT全能应用一本通

引言 随着人工智能技术的不断发展和进步&#xff0c;我们进入了ChatGPT时代。ChatGPT是基于GPT架构的大型语言模型&#xff0c;它具备强大的自然语言处理和生成能力&#xff0c;使得我们能够进行更加自由、流畅的对话。作为ChatGPT的全能应用&#xff0c;它可以被视为一本通&a…

【性能优化】性能优化

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 性能优化运行效率加载效率减少HTTP请求数量使用CDN缓存压缩文件、混淆样式表放在顶部、js代码放…

广告数仓:采集通道创建

系列文章目录 广告数仓&#xff1a;采集通道创建 文章目录 系列文章目录前言一、环境和模拟数据准备1.hadoop集群2.mysql安装3.生成曝光测试数据 二、广告管理平台数据采集1.安装DataX2.上传脚本生成器3.生成传输脚本4.编写全量传输脚本 三、曝光点击检测数据采集1.安装Zookee…

大数据周会-本周学习内容总结018

开会时间&#xff1a;2023.06.18 15:00 线下会议 01【调研-数据分析&#xff08;质量、ETL、可视化&#xff09;】 ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transform…

开源游戏区块链项目分享:Unity开发的独立区块链

Arouse Blockchain [Unity独立区块链] ❗️千万别被误导&#xff0c;上图内容虽然都在项目中可寻&#xff0c;但与目前区块链的业务代码关联不大&#xff0c;仅供宣传作用(总得放些图看着好看)。之所以有以上内容是项目有个目标功能是希望每个用户在区块链上都有一个独一无二的…