在Python中对HTML表格(使用锚点标记和单元格中的数据)进行排序

时间:2010-04-05 14:49:08

标签: python html sorting html-table

我有必要在Python中对以下结构的给定HTML表进行排序。

<table>
    <tr>
        <td><a href="#">ABCD</a></td>
        <td>A23BND</td>
        <td><a title="ABCD">345345</td>
    </tr>
    <tr>
        <td><a href="#">EFG</a></td>
        <td>Add4D</td>
        <td><a title="EFG">3432</td>
    </tr>
    <tr>
        <td><a href="#">HG</a></td>
        <td>GJJ778</td>
        <td><a title="HG">2341333</td>
    </tr>

</table>

我正在做这样的事情:

container = tree.findall("tr")
strOut = ""
data = []
for elem in container:
    key = elem.findtext(colName)
    data.append((key, elem))

data.sort()

问题是它按<td>内的文字排序。我希望能够按锚值排序而不是href。

我能做些什么来实现这一目标?非常感谢。

3 个答案:

答案 0 :(得分:1)

它按文字排序,因为这是你在

时提取的密钥
key = elem.findtext(colName)

我认为colName是一些标记字符串,而findtext只会找到与该标记匹配的第一个子元素的文本。如果您想要的是将title的某些属性(例如<a>?)的值用作关键字,

for ana in elem.findall('a'):
    key = ana.get('title')
    if key is not None: break

会这样做。你想用什么什么作为关键?

答案 1 :(得分:0)

sort方法具有有价值的keycmp参数,您可以将这些参数用于自定义排序。如果您使用排序所需的额外信息来扩充data数据结构,则可以在key调用中使用cmpsort(取决于具体需要)实现你想要的。这是一个简单的例子:

In [60]: ids = [1, 2, 3]
In [61]: score = {1: 20, 2: 70, 3: 40}
In [62]: ids.sort(key=lambda x: score[x])
In [63]: ids
Out[63]: [1, 3, 2]

在这里,我根据从ids字典中获取的每个id的得分对score列表进行了排序。

答案 2 :(得分:0)

我知道这不是你的问题,但这类事情的最佳做法是使用Javascript。您将在您的网站上获得更好的用户体验(如果这就是您正在做的事情)。

这个js库非常好用且易于使用:    http://www.kryogenix.org/code/browser/sorttable/

相关问题