2017-10-17 73 views
-1

我正在嘗試使用Selenium/Python來讀取基本的HTML表格。每一行被格式化這樣的:解析Selenium中的表格

<tr> 
<td bgcolor="#ffffbb"><font face="Arial"><font size=2><b><a href="https://www.lyngsat.com/tvchannels/id/TV-Polri.html">TV Polri</a></b></td> 
<td bgcolor="#ffffbb"><a href="https://www.lyngsat.com/freetv/Indonesia.html"><img src="/f.gif" title="LyngSat Free TV" height=15 width=15 align=absbottom border=1></a><br></td> 
<td bgcolor="#ffffbb"><font face="Verdana"><font size=1>MPEG-4</td> 
<td bgcolor="#ffffbb"><font face="Verdana" size=1><font color="darkgreen">&nbsp;&nbsp;&nbsp;16</font></td><td bgcolor="#ffffbb"><font face="Verdana" size=1>&nbsp;&nbsp;66</td> 
<td bgcolor="#ffffbb"><font face="Verdana" size=1>&nbsp;142&nbsp;In<br></td> 
<td bgcolor="#d0ffff"><font face="Verdana" size=1>new</font></td> 
</tr> 

該表不包括ID或類鎖斷,所以我使用HREF的內容選擇的行(與電視頻道):

text = "https:www.lyngsat.com/tvchannels/" 

for elem in driver.find_elements_by_xpath('//a[contains(@href,"%s")]' % text): 
    print(elem.text) # Prints TV Polri, the name of the TV channel 

我現在想遍歷兄弟元素以拉取行中的其他信息(例如「MPEG-4」,「16」,「66」,「142 In」,「New」)。這將是最簡單的,如果我可以移動到像下面的兄弟姐妹:

channel_elem = elem.nextsibling() 

......但這個功能似乎並不存在。我也試着尋找其他的兄弟姐妹直接使用「以下同胞」:

for channel_elem in driver.find_elements_by_xpath('//td//a[contains(@href,"%s")]/../../following-sibling::td' % text): 
    # Read 2nd sibling (Channel) 

但沒有找到任何元素,並還感覺就像一個迂迴的解決方案。

在此先感謝您的幫助。

+1

我不知道Selenium是否有這種能力。我會嘗試使用BeautifulSoup,因爲IIRC,你可以找到它的兄弟姐妹 – Mangohero1

+1

[BeautifulSoup兄弟姐妹](https://www.crummy.com/software/BeautifulSoup/bs4/doc/#next-sibling-and-previous-兄弟) – Mangohero1

+0

我不確定xpath如何在你的html中處理'font'元素,但是你是否檢查過'//td//a[contains(@href,"%s")]/../ ../following-sibling :: td'路徑?它看起來像是有一個額外的後臺。試試'//td//a[contains(@href,"%s")]/../following-sibling::td'而不是 –

回答

-2

如何選擇行,然後從中找到列?

for row_elem in driver.find_elements_by_xpath('//a[contains(@href,"%s")]/../..' % text): 
    for col in row_elem.find_elements_by_xpath('./td'): 
     print(col.text) 
+0

這是行不通的,因爲你不能在元素集合上使用'.text'。 – JeffC

+0

謝謝你指出我愚蠢的錯誤@JeffC。我編輯過,以包含列元素的內部循環 –