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.egon11 hat geschrieben: Freitag 27. Dezember 2019, 21:53 stehen die Vereinsnamen doppelt da.
Sonst wäre es ok.
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.egon11 hat geschrieben: Samstag 4. Januar 2020, 18:57 Ich möchte es in enigma2 einbauen, und da läuft nur python2.
Ich habe es mit 'request' gemacht, das ganze läuft auch, ich wollte nur mal testen ob das mit 'urllib2' schneller läuft, weil 'request' ganz schön lange dauert.
Ja genau so ist es.nezzcarth hat geschrieben: Samstag 4. Januar 2020, 19:20
Soweit ich jetzt auf Schnelle herausfinden konnte, haben die Entwickler von diesem 'enigma2' den Wechsel zu Python3 sehenden Auges verschlafen und auch nur so mittelmäßiges Interesse, da nachzubessen. Super :/
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)