Seite 3 von 3

Re: html untersuchen

Verfasst: Mittwoch 30. Oktober 2019, 14:35
von Fire Spike
Ich will noch den fertigen Code posten. Die Trennlinien passen sich an das Terminal an!

Code: Alles auswählen

from bs4 import BeautifulSoup
from urllib.request import urlopen
import requests
import re
import shutil

terminal_länge, _ = shutil.get_terminal_size()
    
def status_parser():
    webseite = urlopen("https://www.python-forum.de/index.php")
    html = webseite.read().decode()
    soup = BeautifulSoup(html, "html.parser")

    werte = ["Themen insgesamt", "Beiträge insgesamt", "Mitglieder insgesamt", "neuestes Mitglied"]

    ausgabetext = ""
    abtrennung("Forumstatistik")
    for text in werte:
        ausgabetext += text + ": " + soup.find("div", "statistics").p.find(text=re.compile(text)).next.text + "\n"
    
    print(ausgabetext[:-1])

def abtrennung(text):
    print("_" * terminal_länge)
    print(text)
    print("_" * terminal_länge)
    
def online_benutzer_parser():
    with requests.Session() as session:
        benutzerdaten = {"username": "Fire Spike",
                        "password": "blabala",
                        "autologin": "on",
                        "login": "Anmelden"
                         }
        users = []
        aktivitäten = []
        session.post("https://www.python-forum.de/ucp.php?mode=login", data=benutzerdaten)
        html = session.get("https://www.python-forum.de/viewonline.php").text
        soup = BeautifulSoup(html, "html.parser")
        abtrennung("Benutzer die online sind")
        for tag in soup.find("div", "forumbg forumbg-table").table.tbody.find_all("tr"):
            try:
                user = tag.td.a.next
            except AttributeError:
                user = tag.td.span.next
            users.append(user)
        for tag in soup.find("div", "forumbg forumbg-table").table.tbody.find_all("tr"):
            aktivität = tag.contents[3].a.next
            aktivitäten.append(aktivität)
        
        max_länge = len(max(users, key=len))
        for i, a in zip(aktivitäten, users):
            anzahl = int(max_länge + 5 - len(a))
            print(a, " " * anzahl, i)
            
        print(soup.find("div", "page-body").p.next)
                
status_parser()
online_benutzer_parser()
Output:

Code: Alles auswählen

________________________________________________________________________________
Forumstatistik
________________________________________________________________________________
Themen insgesamt: 42187
Beiträge insgesamt: 346902
Mitglieder insgesamt: 17925
neuestes Mitglied: MissMapeL
________________________________________________________________________________
Benutzer die online sind
________________________________________________________________________________
Fire Spike         Betrachtet „Wer ist online?“
Google [Bot]       Liest Thema in Verbesserungsvorschläge
Bing [Bot]         Liest Thema in Webframeworks
linde              Foren-Übersicht
Es ist 1 Gast online