Python-BeautifulSoup zu kratzen Tabellen aus einer Webseite
Ich versuche zum sammeln von Informationen von einer website, die eine Datenbank für die Schiffe.
Ich habe versucht, die Informationen mit BeautifulSoup. Aber im moment scheint es nicht zu funktionieren. Ich habe versucht, die Suche im web und versucht, verschiedene Lösungen, aber nicht geschafft, den code zu arbeiten.
Ich Frage mich, habe ich zu ändern
table = soup.find_all("table", { "class" : "table1" })
- - - - Linie, da es 5 Tische mit class='table1'
, aber mein code findet nur 1.
Muss ich eine Schleife erstellen, die für die Tabellen? Als ich dies versuchte, ich konnte es nicht funktioniert. Auch die nächste Zeile table_body = table.find('tbody')
gibt es einen Fehler:
AttributeError: 'ResultSet' object has no attribute 'find'
Sollte dies der Konflikt zwischen BeautifulSoup source-code, das ResultSet Unterklassen Liste und meinem code. Muss ich für die Iteration über die Liste?
from urllib import urlopen
shipUrl = 'http://www.veristar.com/portal/veristarinfo/generalinfo/registers/seaGoingShips?portal:componentId=p_efff31ac-af4c-4e89-83bc-55e6d477d131&interactionstate=JBPNS_rO0ABXdRAAZudW1iZXIAAAABAAYwODkxME0AFGphdmF4LnBvcnRsZXQuYWN0aW9uAAAAAQAYc2hpcFNlYXJjaFJlc3VsdHNTZXRTaGlwAAdfX0VPRl9f&portal:type=action&portal:isSecure=false'
shipPage = urlopen(shipUrl)
from bs4 import BeautifulSoup
soup = BeautifulSoup(shipPage)
table = soup.find_all("table", { "class" : "table1" })
print table
table_body = table.find('tbody')
rows = table_body.find_all('tr')
for tr in rows:
cols = tr.find_all('td')
for td in cols:
print td
print
- Also was ist zu erwarten, dass die Ausgabe?
- Ich brauche die Daten aus den Spalten in den Tabellen. wie Besitzer: TALLINK GRUPP AS; Flagge: ESTLAND; Und schließlich, um es zu speichern alle Daten als Tabelle in.csv-oder .txt
- Eine kurze Antwort:
soup.find_all()
Gegenzug eine Liste, die nicht haben.find()
Methode. Sollten Sie eine for-Schleife verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein paar Dinge:
Als Kevin erwähnt, müssen Sie eine
for
- Schleife zum Durchlaufen der Liste zurückgegebenfind_all
.Nicht alle Tabellen haben eine
tbody
so haben Sie zu wickeln, das Ergebnis derfind
imtry
block.Wenn Sie eine
print
Sie verwenden möchten.text
Methode, so dass Sie drucken den text-Wert und nicht der tag selbst.Hier ist der überarbeitete code:
Produziert die unten Ausgang:
print("no tbody")