2012-09-20 235 views
0

我有这个小代码,它给了我AttributeError:'NoneType'对象没有属性'组'。Python正则表达式 - 解析HTML

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文件寻找<h1>标签值和员工的数量和它们添加到文件中。但由于某种原因,我似乎无法做到。 我们非常感谢您的帮助。

+2

@larsmans:无数的人也包括[this one](http://stackoverflow.com/questions/4231382/regular-expression-pattern-not-matching-anywhere-in-string/4234491#4234491)这实际上演示了如何用正则表达式解析HTML。与此相比,海伦的任务在这里是微不足道的。所以不那么触发 - 高兴。 –

+1

很遗憾,你不能使用'vi'来编辑HTML文件,innit? – tchrist

+0

我认为像美丽肥皂的Scrapy这样的高级图书馆会比正则表达式更适合您的任务。 – mariosangiorgio

回答

1

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

6

您正在使用正则表达式,但将XML与这些表达式匹配得太复杂,太快。不要这样做。

使用HTML解析器来代替,Python有几个选择:

后两者处理格式不正确的HTML也很优雅,使很多拙劣网站的体面感。

ElementTree的例子:

from xml.etree import ElementTree 

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

尽管对HTML文件使用BeatifulSoup或'lxml.html',但它们通常都是格式不正确的XML。 –

+0

@larsmans:是的,好点,补充说明。 –