【问题标题】:Python Regex - Parsing HTMLPython 正则表达式 - 解析 HTML
【发布时间】:2012-09-12 20:45:53
【问题描述】:

我有这个小代码,它给了我 AttributeError: 'NoneType' object has no attribute 'group'。

import sys
import re

#def extract_names(filename):

f = open('name.html', 'r')
text = f.read()

match = re.search (r'<hgroup><h1>(\w+)</h1>', text)
second = re.search (r'<li class="hover">Employees: <b>(\d+,\d+)</b></li>', text)  

outf = open('details.txt', 'a')
outf.write(match)
outf.close()

我的意图是读取一个 .HTML 文件,查找 &lt;h1&gt; 标记值和员工数量,并将它们附加到文件中。但由于某种原因,我似乎无法正确处理。 非常感谢您的帮助。

【问题讨论】:

  • 我认为像 Scrapy of Beautiful Soap 这样的高级库比正则表达式更适合您的任务。
  • @larsmans:无数其他人还包括this one,它实际上演示了如何使用正则表达式解析 HTML。与此相比,海伦在这里的任务微不足道。所以不太高兴。
  • 很遗憾你不能使用vi来编辑HTML文件,innit?
  • 如果您显示您正在查看的 HTML 文件的相关部分,将会有很大帮助。

标签: python html regex


【解决方案1】:

您正在使用正则表达式,但是将 XML 与此类表达式匹配变得太复杂、太快。不要那样做。

改用 HTML 解析器,Python 有几个可供选择:

后两者也可以非常优雅地处理格式错误的 HTML,这对许多拙劣的网站来说很有意义。

元素树示例:

from xml.etree import ElementTree

tree = ElementTree.parse('filename.html')
for elem in tree.findall('h1'):
    print ElementTree.tostring(elem)

【讨论】:

  • 最好使用 BeatifulSoup 或 lxml.html 处理 HTML 文件,但它们通常是格式错误的 XML。
【解决方案2】:

只是为了完成:你的错误信息只是表明你的正则表达式失败并且没有返回任何东西......

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2021-07-20
    • 2014-12-06
    • 2014-05-16
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多