【python】HTMLParser とurllib.request でhtml に含まれている画像URLのリストを作る

html からimg タグのsrc 属性の値を取得してwebページに含まれている画像URLのリストを作ります。

環境

  • Windows10
  • python3.5.2

手こずったところ

  • HTMLParser は継承して必要な処理をオーバーライドして使う。
  • urllib.request.urlopen は、HTTPResponse オブジェクトを返す。
  • HTTPResponse.read メソッドはバイト列を返すので、HTMLParser.feed メソッドにそのまま渡すと、TypeError: Can't convert 'bytes' object to str implicitly と言われる。

ソースコード

from html.parser import HTMLParser
import urllib.request

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.urllist = []

    def handle_starttag(self, tag, attrs):
        if tag != 'img':
            return;
        for attr in attrs:
            if attr[0] == 'src':
                self.urllist.append(attr[1])

if __name__ == '__main__':
    url = 'ここにURLをいれる'
    request = urllib.request.Request(url)
    with urllib.request.urlopen(request) as htmldata:
        parser = MyHTMLParser()
        parser.feed(htmldata.read().decode('utf-8'))
        print(parser.urllist)
        parser.close()