2017-03-03 6 views
0

Ich bin neu in Python und ich möchte die "Preis" -Spalte von Daten aus einer Tabelle abrufen, aber ich kann diese Daten nicht abrufen.Get Spalte aus einer Tabelle mit Python und Beautiful Soup

Zeit, was ich tue:

# Libraies 
from urllib.request import urlopen 
from bs4 import BeautifulSoup 

html = urlopen("http://pythonscraping.com/pages/page3.html") 
soup = BeautifulSoup(html, "html.parser") 
table = soup.find("table") 

for row in table.find_all("tr"): 

    col = row.find_all("td") 

    print(col[2]) 
    print("---") 

Ich halte eine Liste Indexbereich aus Wert bekommen. Ich habe die Dokumentation gelesen und einige verschiedene Methoden ausprobiert, aber ich kann es nicht verstehen.

Auch ich benutze Python3.

Antwort

0

Das Problem ist, dass Sie all tr in der Tabelle iterieren sind, und es gibt 1 Header tr am Anfang, die Sie nicht benötigen, so einfach zu vermeiden, mit, dass man:

# Libraies 
from urllib.request import urlopen 
from bs4 import BeautifulSoup 

html = urlopen("http://pythonscraping.com/pages/page3.html") 
soup = BeautifulSoup(html, "html.parser") 
table = soup.find("table") 

for row in table.find_all("tr")[1:]: 

    col = row.find_all("td") 

    print(col[2]) 
    print("---") 
+0

, dass das Problem ist. Ich werde sicherstellen, dass ich die Tabelle beim nächsten Mal überprüfe. – liquidsword92

0

Wahrscheinlich bedeutet, dass eine der Zeilen kein td Tag hat. Sie könnten den print oder was auch immer Gebrauch von col[2] in einem Versuch, außer Block wickeln und Fälle ignorieren, wo die col leer ist oder weniger als drei Elemente

for row in table.find_all("tr"): 

    col = row.find_all("td") 
    try: 
     print(col[2]) 
     print("---") 
    except IndexError: 
     pass 
Verwandte Themen