在Python中对包含锚标签和单元格数据的HTML表格排序

0 投票
3 回答
2910 浏览
提问于 2025-04-15 21:15

我需要在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()

但问题是,它是根据标签里面的文本来排序的。我想要根据链接的显示值来排序,而不是链接的地址(href)。

我该怎么做才能实现这个呢?非常感谢。

3 个回答

0

我知道这不是你问的问题,但对于这种情况,最好的做法是使用JavaScript。这样你的网站用户体验会更好(如果你是在做网站的话)。

这个JavaScript库非常棒,而且使用起来很简单:

http://www.kryogenix.org/code/browser/sorttable/

0

sort 方法有两个很有用的参数,分别是 keycmp,可以用来进行自定义排序。如果你在 data 数据结构中添加了排序所需的额外信息,就可以在调用 sort 时使用 keycmp(具体用哪个取决于你的需求)来实现你想要的排序效果。下面是一个简单的例子:

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]

在这个例子中,我根据每个 idscore 字典中的分数来对 ids 列表进行排序。

1

它是根据文本进行排序的,因为你在提取时用的就是这个文本作为关键字。

key = elem.findtext(colName)

我想colName是某个标签的字符串,而findtext会找到第一个匹配这个标签的子元素的文本。如果你想用某个属性的值(比如title)作为关键字,

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

可以这样做。你究竟想用什么作为关键字呢?

撰写回答