Python fordert Paginierung an

Abid Ullah 21 Juni 2023
  1. Was ist Paginierung in Python?
  2. Python-Paginierung mit Weiter-Schaltfläche
  3. Python-Paginierung ohne Weiter-Schaltfläche
  4. Python-Paginierung mit unendlicher Schriftrolle
  5. Paginierung mit Schaltfläche “Mehr laden”.
Python fordert Paginierung an

In diesem Artikel erfahren wir mehr über die Paginierung und wie wir Probleme im Zusammenhang mit der Paginierung in Python lösen können. Wenn wir das Ende dieses Artikels erreicht haben, werden wir in der Lage sein, etwas über die Python-Paginierung zu lernen und wie wir mit Problemen damit umgehen können.

Was ist Paginierung in Python?

Bei der Verwendung einer Webanwendung ist es von größter Bedeutung, dass die angezeigten Inhalte nicht nur begrenzt und zwangsweise in eine einzelne Seite eingepasst werden. Dennoch sollte es über mehrere Seiten angezeigt werden, was zu einer besseren Benutzererfahrung beitragen kann.

Diesen Vorgang, Inhalte auf mehrere Seiten zu verteilen, nennt man Paginierung. Es muss beachtet werden, dass wir bei der Umsetzung des Paginierungskonzepts Faktoren wie die Gesamtseitenzahl, den Inhaltstyp, die kategorische Darstellung der diskutierten Themen und eine für die Seiten befolgte numerische Reihenfolge berücksichtigen.

Python-Paginierung mit Weiter-Schaltfläche

Die Paginierung ist nicht immer auf das beschränkt, was Benutzer sehen, d. h. das Frontend der Websites, sondern es ist manchmal auch von größter Bedeutung, die am Backend verwendeten APIs zu paginieren. Wir können mehrere Python-APIs und -Module verwenden, um Paginierungsprobleme zu lösen.

Wir beginnen mit dem Modul Anfragen. Daneben verwenden wir BeautifulSoup4, wenn wir daran interessiert sind, den Inhalt einer Webseite zu finden.

Außerdem werden wir die Bibliothek lxml verwenden, um einen bequemen Zugriff auf die oben genannten Module zu ermöglichen.

Beispielcode:

pip install requests beautifulsoup4 lxml

Die obige Zeile hilft uns, das Modul requests über die Bibliothek beautifulsoup4 zu installieren.

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())

Ausgang:

Page 1 of 3

Das vorherige Code-Snippet soll uns helfen, die Fußzeile aus der im Code angegebenen Webseiten-URL zu erfassen. Sie können die URL nach Bedarf ändern.

Die requests-Bibliothek sendet eine get-Anforderung an die URL.

Für das Objekt Suppe verwenden wir den CSS-Selektor. Wenn wir beispielsweise zu einem anderen Element wechseln möchten, können wir den Namen in soup.select_one(name) eingeben.

Der obige Code war für Webseiten, die die nächste Schaltfläche für die Navigation enthalten. Abgesehen von diesem Szenario kann die Paginierung auch ohne Next-Button für eine Website erfolgen, die infinite scroll und load more button verwendet.

Hinweis: Alle diese Objektnamen, die wir im obigen Code verwendet haben, erhalten wir, indem wir auf der gewünschten Website F12 drücken und dann das Markup auf die erforderlichen Elemente untersuchen. Zum Beispiel:

So inspizieren Sie eine Website

Python-Paginierung ohne Weiter-Schaltfläche

Einige Websites verwenden anstelle der Schaltfläche Weiter Zahlen wie 1,2,3,4 usw., um zwischen verschiedenen Seiten zu blättern. Dies macht es für einen Benutzer noch einfacher, zwischen mehreren Seiten zu navigieren.

In diesem Fall versuchen wir, Daten von der ersten Seite abzurufen und dann mit einer Schleife zu navigieren.

Beispielcode:

# 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()

Ausgang:

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

Python-Paginierung mit unendlicher Schriftrolle

Wie der Name schon sagt, haben wir bei dieser Art der Paginierung keine Weiter-Schaltflächen oder Seitenzahlen, sondern scrollen weiter, um den gewünschten Inhalt anzuzeigen.

Ein einfaches Beispiel für eine solche Paginierung kann jede E-Commerce-Website sein. Uns wird jeweils eine bestimmte Anzahl von Produkten angezeigt, und sobald wir nach unten scrollen, werden uns die nächsten Produkte angezeigt.

Es muss beachtet werden, dass wir uns in solchen Szenarien nicht mit URLs mit mehreren Seiten befassen müssen.

Ein asynchroner Aufruf der API hilft uns dabei, mehr Inhalte zu erhalten, während wir uns bewegen.

Paginierung mit Schaltfläche “Mehr laden”.

Diese Paginierungsmethode ähnelt der Endlos-Scroll-Methode, unterscheidet sich jedoch nur, wenn wir wissen möchten, wie wir zur nächsten Seite wechseln sollen.

In diesem Fall müssen wir eine bestimmte Anzahl von Anfragen erledigen, die immer weiter abnimmt, wenn wir auf die Schaltfläche Mehr laden klicken. Beispielsweise beträgt die Gesamtzahl der Bilder auf einer Website 500, und uns werden jeweils 30 Bilder angezeigt.

Bei jedem Klick auf die Schaltfläche Mehr laden werden uns also die nächsten 30 Bilder präsentiert, und der Zähler subtrahiert diese 30 von den insgesamt 500 Bildern. Betrachten wir zum besseren Verständnis das folgende Beispiel.

Beispielcode:

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

Ausgang:

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
...

Der obige Code druckt weiterhin dieselbe URL und erhöht die Seitenzahl, bis wir das Ende der verfügbaren Seiten erreichen. Für den obigen Code beträgt die Gesamtzahl der Seiten 34.

Wir hoffen, dass Sie diesen Artikel hilfreich finden, um das Konzept der Paginierung in Python zu verstehen.

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

Verwandter Artikel - Python Requests