tutorial script scraping how examples data code python web-scraping beautifulsoup html-parsing wikipedia

script - web scraping python



Wikipedia Data Scraping con Python (1)

Esto es lo que haría:

  • encuentre el párrafo Player Selections del Player Selections
  • obtener el siguiente wikitable usando find_next_sibling()
  • encontrar todas las etiquetas tr dentro
  • para cada fila, encuentre td an th 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.