Python solicita paginación

Abid Ullah 21 junio 2023
  1. ¿Qué es la paginación en Python?
  2. Paginación de Python con el botón Siguiente
  3. Paginación de Python sin el botón Siguiente
  4. Paginación de Python con desplazamiento infinito
  5. Paginación con el botón Cargar más
Python solicita paginación

En este artículo, aprenderemos sobre la paginación y cómo podemos superar los problemas relacionados con la paginación en Python. Una vez que lleguemos al final de este artículo, podremos aprender sobre la paginación de Python y cómo podemos solucionar los problemas con ella.

¿Qué es la paginación en Python?

Al utilizar cualquier aplicación web, es de suma importancia que el contenido que se muestra no se limite y se ajuste a la fuerza a una sola página. Aún así, debe mostrarse en varias páginas, lo que puede ayudar a mejorar la experiencia del usuario.

Este proceso de distribuir contenido en varias páginas se llama paginación. Debe tenerse en cuenta que al implementar el concepto de paginación, consideraremos factores como el número total de páginas, el tipo de contenido, la representación categórica de los temas en discusión y el orden numérico seguido por las páginas.

Paginación de Python con el botón Siguiente

La paginación no siempre se limita a lo que ven los usuarios, es decir, el front-end de los sitios web, pero a veces también es de suma importancia paginar las API utilizadas en el back-end. Podemos usar varias API y módulos de Python para tratar los problemas de paginación.

Comenzaremos haciendo uso del módulo de solicitudes. Además, utilizaremos BeautifulSoup4 si estamos interesados en localizar el contenido de una página web.

Además, utilizaremos la biblioteca lxml para proporcionar un acceso conveniente a los módulos mencionados anteriormente.

Código de ejemplo:

pip install requests beautifulsoup4 lxml

La línea anterior nos ayudará a instalar el módulo solicitudes a través de la biblioteca 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())

Producción :

Page 1 of 3

El fragmento de código anterior nos ayudará a capturar el pie de página de la URL de la página web proporcionada en el código. Puede cambiar la URL según el requisito.

La biblioteca de solicitudes envía una solicitud obtener en la URL.

Para el objeto sopa, estamos usando el Selector CSS. Por ejemplo, si queremos pasar a otro elemento, podemos introducir el nombre en sopa.select_one(name).

El código anterior era para páginas web que incluyen el siguiente botón para navegar. Aparte de este escenario, la paginación también se puede hacer sin el botón siguiente para un sitio web que usa desplazamiento infinito y cargar más botón.

Nota: Obtenemos todos estos nombres de objetos que hemos usado en el código anterior presionando F12 en el sitio web deseado y luego examinando el marcado de los elementos requeridos. Por ejemplo:

Cómo inspeccionar un sitio web

Paginación de Python sin el botón Siguiente

Algunos sitios web, en lugar del botón siguiente, usan números como 1,2,3,4, etc., para desplazarse por las diferentes páginas. Esto hace que sea aún más fácil para un usuario navegar entre varias páginas.

En este caso, intentaremos recuperar datos de la primera página y luego navegar usando un bucle.

Código de ejemplo:

# Handling pages with the Next button
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin


def process_pages():
    get_url = "https://www.gosc.pl/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()

Producción :

https://www.gosc.pl/doc/791526.Zaloz-zbroje/2
https://www.gosc.pl/doc/791526.Zaloz-zbroje/3
https://www.gosc.pl/doc/791526.Zaloz-zbroje/4

Paginación de Python con desplazamiento infinito

Como sugiere el nombre, en este tipo de paginación, no tenemos los siguientes botones o números de página, sino que seguimos desplazándonos para ver el contenido requerido.

Un ejemplo simple de dicha paginación puede ser cualquier sitio web de comercio electrónico. Se nos muestra una cierta cantidad de productos a la vez y, una vez que nos desplazamos hacia abajo, se nos muestran los siguientes productos.

Debe tenerse en cuenta que durante tales escenarios, no tenemos que lidiar con URL de varias páginas.

Una llamada asíncrona a la API nos ayudará a obtener más contenido a medida que avanzamos.

Paginación con el botón Cargar más

Este método de paginación se asemeja al método de desplazamiento infinito, pero solo difiere cuando estamos interesados en saber cómo pasaremos a la página siguiente.

En este caso, tenemos una cierta cantidad de solicitudes para completar que siguen disminuyendo cada vez que hacemos clic en el botón cargar más. Por ejemplo, el número total de imágenes en un sitio web es 500 y se muestran 30 imágenes a la vez.

Entonces, con cada clic en el botón Cargar más, se nos presentan las siguientes 30 imágenes, y el contador resta esas 30 del total de 500 imágenes. Consideremos el siguiente ejemplo para una mejor comprensión.

Código de ejemplo:

import requests
from bs4 import BeautifulSoup

url = "http://smarthistory.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

Producción :

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

El código anterior continuará imprimiendo la misma URL e incrementando el número de página hasta que lleguemos al final de las páginas disponibles. Para el código anterior, el número total de páginas es 34.

Esperamos que este artículo le resulte útil para comprender el concepto de paginación en Python.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

Artículo relacionado - Python Requests