HTMLParser を使用して、次のような単純な html テキストから画像の URL を抽出しています。
html = <p><span style="font-size: 17px;"><span style="color: #993300;"><img style="margin-right: 15px; vertical-align: top;" src="images/announcements.png" alt="announcements" /><cite>some message I would like to preserve with its formatting</cite></span></span></p>
今、img タグのない上記の html のバージョンも必要ですが、適切な場所でタグを閉じるのに苦労しています。これが私が試したものです:
class MyHtmlParser(HTMLParser):
'''
Parse simple url to extract data and image url.
This is expecting a simple url containing only one data block and one iimage url.
'''
def __init__(self):
HTMLParser.__init__(self)
self.noImgHtml = ''
def handle_starttag(self, tag, attrs):
if tag == 'img':
for a in attrs:
if a[0] == 'src':
self.imageUrl = a[1]
else:
print '<%s>' % tag
self.noImgHtml += '<%s>' % tag
for a in attrs:
print '%s=%s' % a
self.noImgHtml += '%s=%s' % a
def handle_endtag(self, tag):
self.noImgHtml += '</%s>' % tag
def handle_data(self, data):
self.noImgHtml += data
MyHtmlParser().feed(html) の出力は次のとおりです。
<b>LATEST NEWS:</b><p><span>style=font-size: 17px;<span>style=color: #993300;</img><cite>The image uploader works again, so make sure to use some screenshots in your uploads/tutorials to make your submission look extra nice</cite></span></span></p>
ご覧のとおり (そして私のコード フローから予想されるとおり)、タグは元の html のように閉じられていません (例: span>)。
これは HTMLParser で簡単に実行できますか、それとも RE を使用してイメージ タグを抽出する必要がありますか (これはあまりエレガントではないようです)。
これを行うために外部モジュールを使用することはできないので、HTMLParser が提供するもので間に合わせる必要があります。
前もって感謝します、フランク