Python 在Selenium中解析表

Python 在Selenium中解析表,python,html,selenium,web-scraping,Python,Html,Selenium,Web Scraping,我正在尝试使用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> <t

我正在尝试使用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>
现在,我想遍历兄弟元素以提取行中的其他信息(例如,“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)
但这找不到任何元素,而且感觉像是一个迂回的解决方案


提前感谢您的帮助。

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

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)

我不确定Selenium是否有这种能力。我会尝试使用BeautifulSoup,因为IIRC,您可以找到itI的同级。我不确定xpath如何处理html中的“font”元素,但您是否检查了“//td//a[包含(@href,“%s”)]/../../..//以下同级::td”路径?看起来有一个额外的后退。请尝试“//td//a[contains(@href,“%s”)]/../following sibling::td”代替谢谢。Beautiful soup是更好的解决方案。这不起作用,因为您不能在元素集合上使用
.text
。感谢您指出我的愚蠢错误@JeffC。我已编辑以包含列元素的内部循环
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)