Webseite nach Ausdruck durchsuchen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Maagi
User
Beiträge: 3
Registriert: Samstag 16. Mai 2020, 23:31

Hallo zusammen,

habe bereits mehrfach vergeblich gegooglet und stelle aus diesem Grund hier meine Frage:

Ich durchsuche mit Beautiful Soup ein Forum mit mehreren Seiten. Nun möchte ich mir ausgeben lassen, wie viele Seiten das Forum insgesamt hat.

Der HTML-Code sieht so aus: <span class="pages">Pages (657):</span>. Hier soll mir 657 zurückgegeben werden.

Kann mir jemand helfen, wie ich das am besten mache?

Vielen Dank vorab!

LG Maagi
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Maagi: Sieht nach einem Job für einen regulären Ausdruck aus. Also per BeautifulSoup nach dem <span>-Tag mit der Klasse "pages" suchen, davon den Text nehmen, und aus dem dann per regulärem Ausdruck die Zahl auslesen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Maagi
User
Beiträge: 3
Registriert: Samstag 16. Mai 2020, 23:31

Danke für die schnelle Antwort Blackjack!

habe zunächst mal probiert die passage aus der Webseite zu filtern:

Code: Alles auswählen

import re
from bs4 import BeautifulSoup
from bs4.dammit import EncodingDetector
import requests

r = requests.get('meine_url')
soup = BeautifulSoup(r.text, 'html.parser')
output = soup.find("span", {'class':'pages'})
print(output)
Leider bekomme ich immer "None" zurückgemeldet?! Woran liegt das, dass Python nichts findet?

Gruß und Danke!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Weil dein Ausdruck halt nicht zum HTML passt. Denn wenn ich deinen Ausschnitt oben nehme, und deine Code, dann bekomme ich ein Ergebnis:

Code: Alles auswählen

from bs4 import BeautifulSoup

HTML = """<html><body><span class="pages">Pages (657):</span></body></html>"""

soup = BeautifulSoup(HTML, 'html.parser')
output = soup.find("span", {'class':'pages'})
print(output)
Maagi
User
Beiträge: 3
Registriert: Samstag 16. Mai 2020, 23:31

Du hast recht!
Habe mir mal mit print(soup.prettify()) die komplette Seite angeschaut. Hier gibt es kein span der Klasse pages....
Wenn ich mir im Browser den Seitenquelltext anzeigen lasse sehe ich den Ausdruck allerdings schon?
Kann ich den Seitenquelltext irgendwie 1 zu 1 einlesen oder wie macht man sowas?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann ist das per JavaScript nachgeladen worden. Da musst du entweder die gleichen requests selbst machen, oder mit selenium arbeiten.
Antworten