正则表达式从html中提取元数据

时间:2012-07-25 07:10:21

标签: python regex

如何制作以下正则表达式:

<meta [^\>]*content\s*=\s*(["\'])(.*?)\1

如果名称标签是动态的吗?

名称标签是:

<meta *name="Generator"* ...

解决方案:

re.compile(r""" <meta name=\"{0}\" [^\>]*content\s*=\s*(["\'])(.*?)\1""".format(meclue), re.I)

2 个答案:

答案 0 :(得分:2)

不要尝试使用正则表达式解析HTML。这是个坏主意。而是使用HTML解析器。 lxml有一个很好的:

import lxml.html

html_string = """<html>
<head>
  <meta name="firstname" />
  <meta name="secondname" />
  <meta someotherattribute="nonsense" />
</head>
<body>
  <p>Something in the body</p>
</body>
</html>"""

html_element = lxml.html.fromstring(html_string)
# get all the name attributes from all meta elements
meta_name_list = html_element.xpath("//meta/@name")
# print them out
for name in meta_name_list:
    print name

输出:

firstname
secondname

答案 1 :(得分:0)

如果您希望正则表达式将元标记与name属性匹配,则应执行此操作:

<meta name="[^"]*" />

我怀疑你的正则表达式你不想完全这样做。如果这不是您所需要的,请提供一些您希望正则表达式匹配的示例字符串