Code: Alles auswählen
html = BeautifulSoup(response.content, 'html.parser')
tabelle = html.find('table')
for row in tabelle.find_all('tr'):
print([cell.text.strip() for cell in row.find_all('td')]
Sonst wäre es ok.
Code: Alles auswählen
html = BeautifulSoup(response.content, 'html.parser')
tabelle = html.find('table')
for row in tabelle.find_all('tr'):
print([cell.text.strip() for cell in row.find_all('td')]
Mein Eindruck ist, dass du vielleicht mit HTML noch nicht ganz warm geworden bist.
Code: Alles auswählen
import requests
from bs4 import BeautifulSoup
url = "http://www.sportal.de/fussball/bundesliga/tabelle/tabelle-saison-2019-2020"
response = requests.get(url)
html = BeautifulSoup(response.content, 'html.parser')
tabelle = html.find(class_="table_content")
liste = []
beschreibung = "{0:<4} {1:<22} {2:>4} {3:>4} {4:>4} {5:>4} {6:>7} {7:>4} {8:>4} ".format("Pl", "Verein", "Sp", "G", "UE", "V", "Tore", "Diff", "P")
liste.append(beschreibung)
for row in tabelle.find_all("ul"):
meintext = [d.text.strip() for d in row.find_all("li")]
text_fertig = "{0:<4} {1:<22} {2:>4} {3:>4} {4:>4} {5:>4} {6:>7} {7:>4} {8:>4} ".format(meintext[0],meintext[2],meintext[3],meintext[4],meintext[5],meintext[6],\
meintext[7],meintext[8],meintext[9])
liste.append(text_fertig)
for text in liste:
print(text)
Code: Alles auswählen
import requests
from bs4 import BeautifulSoup
url = "http://www.sportal.de/fussball/bundesliga/tabelle/tabelle-saison-2019-2020"
response = requests.get(url)
html = BeautifulSoup(response.content, 'html.parser')
Was meinst du mit "dauert ganz schön lange"? Die einzelnen Anfragen? Die Erfahrung habe ich nicht gemacht; requests ist zwar sicher nicht die schnellste HTTP-Bibliothek für Python, aber von denen, die ich kenne die, die am angenehmsten zu benutzen ist und normalerweise schnell genug. Bottlenecks sind eher außerhalb von requests zu verorten, entweder im Netzwerk (langsam antwortende Server etc.), oder im restlichen Code. Als Fallback für Fälle, in denen requests nicht genügt, verwende ich manchmal PyCurl/libcurl. Damit kann man sich dann maßgeschneiderte, effiziente Anfragen basteln. Allerdings ist das nur ein dünner (sehr unpythonischer) Wrapper um eine C-Bibliothek, entsprechend Low-Level und unhandlich in der Benutzung. Vielleicht hat jemand anderes noch einen zugänglicheren Vorschlag.
Ja genau so ist es.
Code: Alles auswählen
response = requests.get(url)
html = BeautifulSoup(response.content, 'html.parser')
Hier kann man nicht sagen, ob der HTTP-Request oder das Einlesen der Daten lange dauert. Das solltest du eingrenzen, bevor du mit Optimierungen beginnst.egon11 hat geschrieben: ↑Samstag 4. Januar 2020, 19:27 Genau genommen dauert der Teil lange:Gibt es für 'bs4' eine Alternative?Code: Alles auswählen
response = requests.get(url) html = BeautifulSoup(response.content, 'html.parser')
Code: Alles auswählen
html.find(class_="table_content")
Code: Alles auswählen
import requests
from bs4 import BeautifulSoup
url = "http://www.sportal.de/fussball/bundesliga/tabelle/tabelle-saison-2019-2020"
response = requests.get(url)
html = BeautifulSoup(response.content, 'lxml-xml').encode('utf-8')
tabelle = html.find(class_="table_content")
Code: Alles auswählen
Traceback (most recent call last):
File "/home/scrip.py", line 8, in <module>
tabelle = html.find(class_="table_content")
TypeError: find() takes no keyword arguments
Code: Alles auswählen
.encode('utf-8')
Code: Alles auswählen
Traceback (most recent call last):
File "/home/scrip.py", line 16, in <module>
meintext[7],meintext[8],meintext[9]) + "\n"
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)
Code: Alles auswählen
import requests
from bs4 import BeautifulSoup
url = "http://www.sportal.de/fussball/bundesliga/tabelle/tabelle-saison-2019-2020"
response = requests.get(url)
html = BeautifulSoup(response.content, 'lxml')
tabelle = html.find(class_="table_content")
liste = []
beschreibung = "{0:<4} {1:<22} {2:>4} {3:>4} {4:>4} {5:>4} {6:>7} {7:>4} {8:>4} ".format("Pl", "Verein", "Sp", "G", "UE", "V", "Tore", "Diff", "P")
liste.append(beschreibung)
for row in tabelle.find_all("ul"):
meintext = [d.text.strip() for d in row.find_all("li")]
text_fertig = "{0:<4} {1:<22} {2:>4} {3:>4} {4:>4} {5:>4} {6:>7} {7:>4} {8:>4} ".format(meintext[0],meintext[2],meintext[3],meintext[4],meintext[5],meintext[6],\
meintext[7],meintext[8],meintext[9]) + "\n"
liste.append(text_fertig)
print(liste)