如何用lxm解析html

2024-09-30 20:39:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个html:

<td class="name-td alLeft bordR">13.10.2016, Thu<span class="sp">|</span>17:00</td>

我想要一个日期(13.10.2016)和一个时间(17:00)。在

我在做:

^{2}$

但是有一个错误

IndexError: list index out of range

我想这是因为我在a标记中有一个html标记

你能帮帮我吗?在


Tags: name标记indexhtml错误时间splist
2条回答

问题在于检查bordR类的方式。class是一个以空格分隔的多值属性,您必须考虑元素上的其他类。在XPath中,应该使用“contains”:

.//td[contains(@class, 'bordR')]

或者,更可靠的是add "concat" to the partial match check。在

找到元素后,可以使用.text_content()方法获取包含所有子元素的完整文本:

^{pr2}$

要进一步,您可以load the date string into a ^{} object

In [5]: from datetime import datetime
In [6]: datetime.strptime(td.text_content(), "%d.%m.%Y, %a|%H:%M")
Out[6]: datetime.datetime(2016, 10, 13, 17, 0)

有一个名为^{}的方法:

Iterates over the text content of a subtree.

因此,如果变量td中有一个元素td,可以这样做:

>>> text = list(td.itertext()); text
['13.10.2016, Thu', '|', '17:00']

>>> date, time = text[0].split(',')[0], text[-1]

>>> datetime_text = '{} at {}'.format(date, time)

>>> datetime_text
'13.10.2016 at 17:00'

相关问题 更多 >