2015-09-16 135 views
2

我一直在試圖用Python刮掉一個HTML表格,並且因爲某些原因我無法打印它,因爲我剛開始使用Python(2天后),我幾乎沒有抓到表面,這也是我的第一個堆棧溢出帖子,所以我會盡量使它儘可能描述。Python HTML table scrape(打印)

很確定這個問題可能之前已經被問過了,在這種情況下我很抱歉。

反正!下面的代碼:

import urllibs2 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(urllib2.urlopen ('http://premierleague.com/en-gb/matchday/league-table.html').read()) 
for row in soup('table',{'class':'leagueTable'})[0].tbody('tr'): 
tds=row('td') 

http://premierleague.com/en-gb/matchday/league-table.html

我弱的Python和我不知道該代碼是正確的這種類型的刮的,但是從我能理解自己這是在打印,我可以沒有工作。我嘗試了不同的打印方式,但無法使其正常工作。

回答

1

更簡單 - 使用CSS selector獲得所需行 - 其位於具有tableleagueTable類內部club-rowtr元素。爲每一行獲取所有單元格的文本。工作示例:

import urllib2 

from bs4 import BeautifulSoup 

soup = BeautifulSoup(urllib2.urlopen('http://www.premierleague.com/en-gb/matchday/league-table.html')) 

for row in soup.select("table.leagueTable tr.club-row"): 
    cells = [cell.get_text(strip=True) for cell in row.find_all('td')] 
    print cells 

打印:

[u'1', u'', u'(1)', u'Manchester City', u'5', u'5', u'0', u'0', u'11', u'0', u'11', u'15'] 
[u'2', u'', u'(2)', u'Leicester City', u'5', u'3', u'2', u'0', u'11', u'7', u'4', u'11'] 
[u'3', u'', u'(3)', u'Manchester United', u'5', u'3', u'1', u'1', u'6', u'3', u'3', u'10'] 
[u'4', u'', u'(4)', u'Arsenal', u'5', u'3', u'1', u'1', u'5', u'3', u'2', u'10'] 
[u'5', u'', u'(10)', u'West Ham United', u'5', u'3', u'0', u'2', u'11', u'6', u'5', u'9'] 
[u'6', u'', u'(5)', u'Crystal Palace', u'5', u'3', u'0', u'2', u'8', u'6', u'2', u'9'] 
[u'7', u'', u'(6)', u'Everton', u'5', u'2', u'2', u'1', u'8', u'5', u'3', u'8'] 
[u'8', u'', u'(7)', u'Swansea City', u'5', u'2', u'2', u'1', u'7', u'5', u'2', u'8'] 
[u'9', u'', u'(8)', u'Norwich City', u'5', u'2', u'1', u'2', u'8', u'9', u'-1', u'7'] 
[u'10', u'', u'(9)', u'Liverpool', u'5', u'2', u'1', u'2', u'3', u'6', u'-3', u'7'] 
[u'11', u'', u'(11)', u'Southampton', u'5', u'1', u'3', u'1', u'5', u'5', u'0', u'6'] 
[u'12', u'', u'(12)', u'Tottenham Hotspur', u'5', u'1', u'3', u'1', u'4', u'4', u'0', u'6'] 
[u'13', u'', u'(13)', u'Watford', u'5', u'1', u'3', u'1', u'3', u'4', u'-1', u'6'] 
[u'14', u'', u'(14)', u'West Bromwich Albion', u'5', u'1', u'2', u'2', u'3', u'6', u'-3', u'5'] 
[u'15', u'', u'(15)', u'Aston Villa', u'5', u'1', u'1', u'3', u'6', u'8', u'-2', u'4'] 
[u'16', u'', u'(16)', u'Bournemouth', u'5', u'1', u'1', u'3', u'6', u'9', u'-3', u'4'] 
[u'17', u'', u'(17)', u'Chelsea', u'5', u'1', u'1', u'3', u'7', u'12', u'-5', u'4'] 
[u'18', u'', u'(19)', u'Stoke City', u'5', u'0', u'2', u'3', u'3', u'7', u'-4', u'2'] 
[u'19', u'', u'(20)', u'Sunderland', u'5', u'0', u'2', u'3', u'6', u'11', u'-5', u'2'] 
[u'20', u'', u'(18)', u'Newcastle United', u'5', u'0', u'2', u'3', u'2', u'7', u'-5', u'2'] 

現在,我們可以清楚地看到 - 這是切爾西一個可怕的開始。

+0

乾杯隊友!無法打印超過4行tho,具有諷刺意味的是阿森納。哈哈,希望對切爾西來說這樣。另外,如何將此代碼包含在HTML表格中,我的意思是這是一個簡單的過程,還是應該閱讀這些內容?預先感謝兄弟! – smokeyblunts

+0

@smokeyblunts我們正在體驗bs4從當前python環境中自動選擇的[parser之間的差異](http://www.crummy.com/software/BeautifulSoup/bs4/doc/#differences-between-parsers)。安裝'html5lib'或'lxml'並且調用'BeaufitulSoup'構造函數爲'BeautifulSoup(urllib2.urlopen('http://premierleague.com/en-gb/matchday/league-table.html'),「html5lib」)'或'BeautifulSoup(urllib2.urlopen('http://premierleague.com/en-gb/matchday/league-table.html'),「lxml」)。 – alecxe

+0

非常感謝讓我的生活更輕鬆!祝你有個好的一天。 – smokeyblunts