2016-07-27 14 views
0

Ich versuche, den Tisch mit dem Verordnungsentwurf von this wikipedia pagekann nur Scrape Teil der Tabelle mit Python und BS4

Ich habe ein Problem, wo die Daten nur zu kratzen, die mit einem anderen aus den Reihen gezogen wird, sind Hintergrundfarbe (die mit einem '*' neben der runden Zahl).

Mein Code ist wie folgt:

wikiURL = "https://en.wikipedia.org/wiki/2012_NFL_Draft" 

#create array to store player info in 
teams_players = [] 

# request and parse wikiURL 
r = requests.get(wikiURL) 
soup = BeautifulSoup(r.content, "html.parser") 

#find table in wikipedia 
playerData = soup.find('table', {"class": "wikitable sortable"}) 

for row in playerData.find_all('tr'): 
    cols = row.find_all('td') 

    if len(cols) == 9: 

     teams_players.append((cols[3].text.strip(), cols[4].text.strip())) 

for team, player in teams_players: 
    print('{:35} {}'.format(team, player)) 
+0

Wenn Sie Quellcode HTML suchen, werden Sie sehen, dass es etwas mehr dificullt Struktur als table-> tr-> td hat, so sollten Sie es komplexer analysieren. – Compadre

Antwort

1

, dass wegen der if len(cols) == 9: Zustand ist. Sie müssen:

  • für beide td und th Elemente innerhalb jeder tr
  • die erste Kopfzeile
  • Blick überspringen
  • Zeilen weniger mit Zahl überspringen als 6

Fest Version:

for row in playerData.find_all('tr')[1:]: 
    cols = row.find_all(['td', 'th']) 
    if len(cols) < 6: 
     continue 
    teams_players.append((cols[5].text.strip(), cols[6].text.strip())) 

Abzüge:

QB         Stanford 
QB         Baylor 
... 
RB         Abilene Christian 
QB         NIU 
+0

Das funktioniert, aber was war falsch mit der Bedingung '(if len (cols) == 9 :)'? Ist die Anzahl der Spalten in jeder Zeile nicht konstant? – Michael

+1

@Michael nein, siehe "th" und "td" Elemente wurden verwendet, um Zellen in einer Zeile darzustellen. – alecxe

Verwandte Themen