2016-01-22 288 views
1

我想從AFC team forsters 網頁中提取數據的Python的XPath看起來是這樣的:提取數據 -

image of page

頁有聯賽,如東亞足聯的列表。每個聯賽都有幾支球隊,比如布法羅比爾和邁阿密海豚隊。每個隊(例如布法羅比爾)都有很長的隊員名單。

使用Xpath,我可以提取所有聯賽的列表,所有球隊的列表以及所有球員的「分開」列表。

team_name = data.xpath("//tr/th/div/text()") 
player_name = data.xpath("//tr/td/ul/li/a/text()") 
league_name = data.xpath("//h2//span/a/text()") 

但是,我所希望做到的是這樣的:

league_name, team_name, player_name 
AFC East, Buffalo Bills, EJ Manuel 
AFC East, Buffalo Bills, Tyrod Taylor 
AFC East, Buffalo Bills, Anthony Dixon 
... 
AFC East, Miami Dolphins, Zac Dysert 
... 

如何才能做到這一點?提前致謝。

回答

3

我會遍歷對應於球隊的名字每一個h3元素,然後獲得與玩家信息下一個table同級元素。聯賽名稱將是前面的h2元素。完整的工作代碼:

import requests 
from lxml.html import fromstring 


tree = fromstring(requests.get("https://en.wikipedia.org/wiki/List_of_current_AFC_team_rosters").content) 

for h3 in tree.xpath("//div[@id='mw-content-text']//h3[span/@class='mw-headline']"): 
    team_name = h3.xpath(".//a/text()")[0] 
    league_name = h3.xpath("preceding-sibling::h2[1]//a/text()")[0] 
    players = h3.xpath("following-sibling::table[1]//ul/li/a/text()") 

    print(league_name, team_name, players) 

打印:

AFC East Buffalo Bills ['EJ Manuel', 'Tyrod Taylor', 'Anthony Dixon', 'Jerome Felton', 'Mike Gillislee', 'LeSean McCoy', 'Karlos Williams', 'Leonard Hankerson', 'Marcus Easley', 'Marquise Goodwin', 'Percy Harvin', 'Dez Lewis', 'Walt Powell', 'Greg Salas', 'Sammy Watkins', 'Robert Woods', 'Charles Clay', 'Chris Gragg', "Nick O'Leary", 'Tyson Chandler', 'Ryan Groy', 'Seantrel Henderson', 'Cyrus Kouandjio', 'John Miller', 'Kraig Urbik', 'Eric Wood', 'T. J. Barnes', 'Marcell Dareus', 'Lavar Edwards', 'IK Enemkpali', 'Jerry Hughes', 'Kyle Williams', 'Mario Williams', 'Jerel Worthy', 'Jarius Wynn', 'Preston Brown', 'Randell Johnson', 'Manny Lawson', 'Kevin Reddick', 'Tony Steward', 'A. J. Tarpley', 'Max Valles', 'Mario Butler', 'Ronald Darby', 'Stephon Gilmore', 'Corey Graham', 'Leodis McKelvin', 'Jonathan Meeks', 'Merrill Noel', 'Nickell Robey', 'Sammy Seamster', 'Cam Thomas', 'Aaron Williams', 'Duke Williams', 'Dan Carpenter', 'Jordan Gay', 'Garrison Sanborn', 'Colton Schmidt', 'Blake Annen', 'Jarrett Boykin', 'Jonathan Dowling', 'Greg Little', 'Jacob Maxwell', 'Ronald Patrick', 'Cedric Reed', 'Cyril Richardson', 'Phillip Thomas', 'James Wilder, Jr.', 'Nigel Bradham', 'Ron Brooks', 'Alex Carrington', 'Cordy Glenn', 'Leonard Hankerson', 'Richie Incognito', 'Josh Johnson', 'Corbin Bryant', 'Stefan Charles', 'MarQueis Gray', 'Chris Hogan', 'Jordan Mills', 'Ty Powell', 'Bacarri Rambo', 'Cierre Wood'] 
AFC East Miami Dolphins ['Zac Dysert', 'Ryan Tannehill', 'Logan Thomas', 'Jay Ajayi', 'Jahwan Edwards', 'Damien Williams', 'Tyler Davis', 'Robert Herron', 'Greg Jennings', 'Jarvis Landry', 'DeVante Parker', 'Kenny Stills', 'Jordan Cameron', 'Dominique Jones', 'Dion Sims', 'Branden Albert', 'Jamil Douglas', "Ja'Wuan James", 'Vinston Painter', 'Mike Pouncey', 'Anthony Steen', 'Dallas Thomas', 'Billy Turner', 'Deandre Coleman', 'Quinton Coples', 'Terrence Fede', 'Dion Jordan', 'Earl Mitchell', 'Damontre Moore', 'Jordan Phillips', 'Ndamukong Suh', 'Charles Tuaau', 'Robert Thomas', 'Cameron Wake', 'Julius Warmsley', 'Jordan Williams', 'Neville Hewitt', 'Mike Hull', 'Jelani Jenkins', 'Terrell Manning', 'Chris McCain', 'Koa Misi', 'Zach Vigil', 'Walt Aikens', 'Damarr Aultman', 'Brent Grimes', 'Reshad Jones', 'Tony Lippett', 'Bobby McCain', 'Brice McCain', 'Tyler Patmon', 'Dax Swanson', 'Jamar Taylor', 'Matt Darr', 'John Denney', 'Andrew Franks', 'Louis Delmas', 'James-Michael Johnson', 'Rishard Matthews', 'Jacques McClendon', 'Lamar Miller', 'Matt Moore', 'Spencer Paysinger', 'Derrick Shelby', 'Kelvin Sheppard', 'Shelley Smith', 'Olivier Vernon', 'Michael Thomas', 'Brandon Williams', 'Shamiel Gary', 'Matt Hazel', 'Ulrick John', 'Jake Stoneburner'] 
AFC East New England Patriots ['Tom Brady', 'Jimmy Garoppolo', 'Brandon Bolden', 'Steven Jackson', 'James White', 'Danny Amendola', 'Julian Edelman', 'Brandon LaFell', 'Keshawn Martin', 'Matthew Slater', 'Scott Chandler', 'Rob Gronkowski', 'Michael Williams', 'Marcus Cannon', 'Cameron Fleming', 'Josh Kline', 'Bryan Stork', 'Sebastian Vollmer', 'LaAdrian Waddle', 'Alan Branch', 'Akiem Hicks', 'Chandler Jones', "Ishmaa'ily Kitchen", 'Rob Ninkovich', 'Jabaal Sheard', 'Sealver Siliga', 'Jon Bostic', 'Jamie Collins', 'Darius Fleming', 'Jonathan Freeny', "Dont'a Hightower", 'Dekoda Watson', 'Malcolm Butler', 'Patrick Chung', 'Nate Ebner', 'Duron Harmon', 'Leonard Johnson', 'Devin McCourty', 'Logan Ryan', 'Tavon Wilson', 'Ryan Allen', 'Stephen Gostkowski', 'LeGarrette Blount', 'Tarell Brown', 'James Develin', 'Aaron Dobson', 'Dominique Easley', 'Dane Fletcher', 'Tyler Gaffney', 'Brandon Gibson', 'Rufus Johnson', 'Chris Jones', 'Dion Lewis', 'Eric Martin', 'Jerod Mayo', 'Nate Solder', 'Brian Tyms', 'Ryan Wendell', 'Montee Ball', 'Chris Barker', 'Rashaan Melvin', 'Keavon Milton', 'Brock Vereen'] 
... 
AFC West San Diego Chargers ['Kellen Clemens', 'Philip Rivers', 'Donald Brown', 'David Johnson', 'Danny Woodhead', 'Vincent Brown', 'Malcom Floyd', 'Javontee Herndon', 'Dontrelle Inman', 'Stevie Johnson', 'Asante Cleveland', 'Antonio Gates', 'Sean McGrath', 'John Phillips', 'Joe Barksdale', 'King Dunlap', 'Orlando Franklin', 'D. J. Fluker', 'Chris Hairston', 'Jeff Linkenbach', 'Trevor Robinson', 'J. D. Walton', 'Kenny Wiggins', 'Ryan Carrethers', 'Ricardo Mathews', 'Kendall Reyes', 'Damion Square', 'Jeremiah Attaochu', 'Donald Butler', 'Kavell Conner', 'Melvin Ingram', 'Cordarro Law', 'Joe Mays', 'Dexter McCoil', "Manti Te'o", 'Jahleel Addae', 'Matt Daniels', 'Greg Ducre', 'Adrian Phillips', 'Patrick Robinson', 'Brandian Ross', 'Jason Verrett', 'Steve Williams', 'Mike Scifres', 'Mike Windt', 'Keenan Allen', 'Chi Chi Ariguzo', 'Brandon Flowers', 'Ladarius Green', 'Sean Lissemore', 'Corey Liuget', 'Branden Oliver', 'Tenny Palepoi', 'Darrell Stuckey', 'Johnnie Troutman', 'Chris Watt', 'Eric Weddle', 'Tourek Williams', 'Alex Bayer', 'Isaiah Burse', 'Richard Crawford', 'Ben Gardner', 'Michael Huey', 'Keith Lewis', 'Chuka Ndulue', 'Tim Semisch', 'Brad Sorensen', 'Craig Watts'] 
+0

太好了!非常感謝! – kevin