在Selenium解析一张 table

我正在尝试使用Selenium / Python来读取基本的HTML表 . 每行的格式如下:

<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的内容选择行(与电视 Channels 相关):

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()

...但是这个功能似乎不存在 . 我也尝试使用'follow-sibling'直接找到其他兄弟姐妹:

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

但是这没有找到任何元素,也感觉像是一个迂回的解决方案 .

在此先感谢所有的帮助 .

回答(1)

3 years ago

如何选择行,然后从中找到列?

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)