有時候測試代碼需要大量的合法URL,而自己隨機生成的又可能不存在,所以通常情況下會找一些包涵大量URL的頁面去分析提取,HTMLParser就是這樣一個頁面分析工具,它是python的標准庫,而且用起來很簡單,所以在偶爾需要提取頁面標簽數據的時候很適合。
解決
通常HTMLParser都是與urllib一起使用,比如要提取百度首頁上的所有URL:
# -*- coding: utf-8 -*-
import urllib
import HTMLParser
class URLParser(HTMLParser.HTMLParser):
def handle_starttag(self, tag, attrs):
if tag == 'a':
for name, value in attrs:
if name == 'href' and value.startswith('http'):
print >> f, value
break
with open('db.txt', 'w') as f:
parser = URLParser()
try:
parser.feed(
urllib.urlopen('http://www.baidu.com').read().decode('gbk')
)
except HTMLParser.HTMLParseError, e:
print e
finally:
parser.close()
但是因為一些頁面的不規范,所以經常會遇到HTMLParser.HTMLParseError: malformed start tag錯誤,如果這樣可以考慮re模塊,或者使用BeautifulSoup來代替HTMLParser。