正则表达式 - 从HTML读取日期

时间:2013-09-25 15:12:08

标签: python

如果有人能告诉我这段代码我做错了什么,我会更加干净。我有一个HTML,想要读出成立的年份 - 在这种情况下 1949 。我怎么样?请注意空格和空白行。

以下是代码

<h4>  Founded in

</h4></td><td><h5> <!--10305--> 1949</h5></td></tr> <tr>

这是我正在使用的代码。没有任何东西正在印刷。

myf = 'THE HTML HERE'
myf.replace("<!--10305-->", "")
year = re.findall(r"<h4>  Founded in.*? (.*?)</h5></td></tr> <tr>", myf, re.DOTALL)
print year

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

lxml与xpath一起使用:

>>> import lxml.html
>>>
>>> root = lxml.html.fromstring('''
... <tr>
... <td>
... <h4>  Founded in
...
... </h4></td><td><h5> <!--10305--> 1949</h5></td></tr>
... ''')
>>> root.xpath('//h4[contains(text(), "Founded in")]/parent::*/following-sibling::*')[0].text_content().strip()
'1949'

答案 1 :(得分:0)

字符串是不可变的。这样:

myf.replace("<!--10305-->", "")

返回一个值,但不会更改myf。你想要:

myf = myf.replace("<!--10305-->", "")

此外,此代码无论如何都会打印出来:

import re

myf = """\
<h4>  Founded in

</h4></td><td><h5> <!--10305--> 1949</h5></td></tr> <tr>"""

myf.replace("<!--10305-->", "")

year = re.findall(r"<h4>  Founded in.*? (.*?)</h5></td></tr> <tr>", myf, re.DOTALL)

year
#>>> ['<!--10305--> 1949']

所以真正的问题出在其他地方。