我有必要在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。
我能做些什么来实现这一目标?非常感谢。
答案 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
方法具有有价值的key
和cmp
参数,您可以将这些参数用于自定义排序。如果您使用排序所需的额外信息来扩充data
数据结构,则可以在key
调用中使用cmp
或sort
(取决于具体需要)实现你想要的。这是一个简单的例子:
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/