如何将HTML列表条目提取到Python列表中?

时间:2011-08-09 21:18:54

标签: python regex

  

可能重复:
  Parsing HTML in Python

我有一长串HTML,类似于以下内容:

<ul>
<li><a href="/a/long/link">Class1</a></li>
<li><a href="/another/link">Class2</a></li>
<li><img src="/image/location" border="0">Class3</a></li>
</ul>

它有几个列表条目(Class1到Class8)。我想把它变成Python中只有类名的列表,如

["Class1", "Class2", "Class3"]

等等。

我该怎么做呢?我尝试过使用RE,但我找不到有效的方法。当然,只有8个类我可以轻松地手动完成,但我还有几个HTML文档可以从中提取数据。

谢谢! :)

3 个答案:

答案 0 :(得分:0)

如果所有行结尾都相同,您可以尝试使用正则表达式,如

re.compile(r'^<li><.*>(.*)</a></li>$')

如果你期望文件中的变化比你的例子更多,那么像HTML解析器这样的东西可能会更好。

答案 1 :(得分:0)

这应该可行,但只需将其作为快速丑陋的黑客do not parse HTML with regular expressions

>>> hdata = """<ul>
... <li><a href="/a/long/link">Class1</a></li>
... <li><a href="/another/link">Class2</a></li>
... <li><img src="/image/location" border="0">Class3</a></li>
... </ul>"""
>>> import re
>>> lire = re.compile(r'<li>.*?>(.*?)<.*')
>>> [lire.search(x).groups()[0] for x in hdata.splitlines() if lire.search(x)]
    ['Class1', 'Class2', 'Class3']

如果您的来源是有效的XML,则可以尝试使用Element Tree,否则请查找Beautiful Soup

答案 2 :(得分:0)

查看lxml(pip install lxml)。你会想做更多的研究,但实际上它归结为这样的事情:

from lxml import etree

tree = etree.HTML(page_source)
def parse_list(xpath):
    ul = tree.xpath(xpath)
    return [child.text for child in ul.getchildren()]