script - web scraping python
Wikipedia Data Scraping con Python (1)
Esto es lo que haría:
- encuentre el párrafo
Player Selections
delPlayer Selections
- obtener el siguiente
wikitable
usandofind_next_sibling()
- encontrar todas las etiquetas
tr
dentro - para cada fila, encuentre
td
anth
etiquetas y obtenga las celdas deseadas por índice
Aquí está el código:
filter_position = ''QB''
player_selections = soup.find(''span'', id=''Player_selections'').parent
for row in player_selections.find_next_sibling(''table'', class_=''wikitable'').find_all(''tr'')[1:]:
cells = row.find_all([''td'', ''th''])
try:
nfl_team, name, position, college = cells[3].text, cells[4].text, cells[5].text, cells[6].text
except IndexError:
continue
if position != filter_position:
continue
print nfl_team, name, position, college
Y aquí está la salida (solo se marcan los mariscales de campo):
Atlanta Falcons Ryan, MattMatt Ryan† QB Boston College
Baltimore Ravens Flacco, JoeJoe Flacco QB Delaware
Green Bay Packers Brohm, BrianBrian Brohm QB Louisville
Miami Dolphins Henne, ChadChad Henne QB Michigan
New England Patriots O''Connell, KevinKevin O''Connell QB San Diego State
Minnesota Vikings Booty, John DavidJohn David Booty QB USC
Pittsburgh Steelers Dixon, DennisDennis Dixon QB Oregon
Tampa Bay Buccaneers Johnson, JoshJosh Johnson QB San Diego
New York Jets Ainge, ErikErik Ainge QB Tennessee
Washington Redskins Brennan, ColtColt Brennan QB Hawaiʻi
New York Giants Woodson, Andre''Andre'' Woodson QB Kentucky
Green Bay Packers Flynn, MattMatt Flynn QB LSU
Houston Texans Brink, AlexAlex Brink QB Washington State
Estoy tratando de recuperar 3 columnas (Equipo NFL, Nombre del jugador, Equipo universitario) de la siguiente página de wikipedia . Soy nuevo en Python y he estado tratando de usar beautifulsoup para hacer esto. Solo necesito las columnas que pertenecen a QB, pero ni siquiera he podido obtener todas las columnas a pesar de la posición. Esto es lo que tengo hasta ahora y no produce nada y no estoy del todo seguro de por qué. Creo que se debe a las etiquetas a, pero no sé qué cambiar. Cualquier ayuda sería muy apreciada ".
wiki = "http://en.wikipedia.org/wiki/2008_NFL_draft"
header = {''User-Agent'': ''Mozilla/5.0''} #Needed to prevent 403 error on Wikipedia
req = urllib2.Request(wiki,headers=header)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
rnd = ""
pick = ""
NFL = ""
player = ""
pos = ""
college = ""
conf = ""
notes = ""
table = soup.find("table", { "class" : "wikitable sortable" })
#print table
#output = open(''output.csv'',''w'')
for row in table.findAll("tr"):
cells = row.findAll("href")
print "---"
print cells.text
print "---"
#For each "tr", assign each "td" to a variable.
#if len(cells) > 1:
#NFL = cells[1].find(text=True)
#player = cells[2].find(text = True)
#pos = cells[3].find(text=True)
#college = cells[4].find(text=True)
#write_to_file = player + " " + NFL + " " + college + " " + pos
#print write_to_file
#output.write(write_to_file)
#output.close()
Sé que mucho de esto está comentado porque estaba tratando de encontrar dónde estaba el colapso.