2012-09-20 249 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:是的,好點,補充說明。 –