可能重复:
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文档可以从中提取数据。
谢谢! :)
答案 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()]