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 中分页的概念。
相关文章
Python 生成器推导
发布时间:2023/06/02 浏览次数:159 分类:Python
-
在本文中,我们将学习 python 的生成器和生成器推导以及示例。Python 中的生成器:Python 中的生成器是返回可迭代或遍历对象的函数,用于创建一次遍历项目的迭代器。
在 Python 中检查生成器是否为空
发布时间:2023/06/02 浏览次数:139 分类:Python
-
本文讨论如何在 Python 中检查生成器是否为空。在 Python 中检查生成器是否为空是指检查路径以确保它为空。
在 Python 中使用 PhantomJS
发布时间:2023/06/02 浏览次数:107 分类:Python
-
这篇 Python 文章将研究 PhantomJS 以及我们如何将它与用于 Python 编程的 Selenium Web 自动化模块一起使用。 我们还将研究为什么它比其他可用的自动化 Web 驱动程序更有用。
Python 查询 DynamoDB
发布时间:2023/06/02 浏览次数:127 分类:Python
-
本文将讨论如何使用 python 查询 Amazon DynamoDB。 我们还将讨论 Boto3 是什么以及它为什么需要查询 DynamoDB。
创建 Python 脚本以在 Linux 中打开新终端并运行命令
发布时间:2023/06/02 浏览次数:54 分类:Python
-
Linux 操作系统以其程序员广泛使用的多功能终端而闻名。创建在 Linux 中打开新终端并运行命令的 Python 脚本
Python Crc32 介绍
发布时间:2023/06/02 浏览次数:182 分类:Python
-
本篇文章将介绍使用 Python 中的 binascii 或 zlib 库计算数据的 crc32。Python CRC32 。CRC32 是数据的校验和,也称为循环冗余校验,用于检查数据的数字传输中存在的错误。
在 Python 中使用 Luhn 算法验证数字
发布时间:2023/06/02 浏览次数:164 分类:Python
-
这篇文章解释了用 Python 编写 Luhn 算法并根据算法验证数字。在 Python 中使用 Luhn 算法验证数字 Luhn 算法验证器有助于检查合法数字并将其与不正确或拼写错误的输入分开。
Python - 匹配多行文本块的正则表达式
发布时间:2023/06/02 浏览次数:192 分类:Python
-
本文讨论了在多行字符串中搜索特定模式的方法。 该解决方案折衷了已知和未知模式的几种方法,并解释了匹配模式的工作原理。编写正则表达式以匹配多行字符串的原因
在 Python 中使用正则表达式捕获组
发布时间:2023/06/02 浏览次数:78 分类:Python
-
本篇文章介绍了如何借助 Python 中的正则表达式捕获组。 我们还将了解这些群体以及我们如何捕获它们。 让我们开始吧。在 Python 中使用正则表达式捕获组