在Selenium解析一张桌子

时间:2017-10-17 19:45:54

标签: 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>
<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

我现在想要遍历兄弟元素来拉动行中的其他信息(例如&#34; MPEG-4&#34;,&#34; 16&#34;,&#34; 66&#34;,&#34; 142 In&#34;,&#34; New&#34;)。如果我可以通过以下方式移动到下一个兄弟,那将是最简单的:

channel_elem = elem.nextsibling()

...但这个功能似乎不存在。我也试过直接使用&#39;以下兄弟姐妹来找到其他兄弟姐妹:

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

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

提前感谢所有帮助。

1 个答案:

答案 0 :(得分:-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)