Python_HTML解析

HTMLを取得する。

urllibを使ってHTMLを取得することができます。

Python3ではurllib3がurllibに統合されました。


HTMLの取得

urllib.request.urlopen()でHTMLを取得できます。

文字コードをUTF-8にする場合には、「decode('UTF-8')」を呼びます。


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


import urllib.request


url = "http://capm-network.com"

req = urllib.request.urlopen(url)

html = req.read().decode('UTF-8')

req.close()

print(html)

HTML タグの情報を取得・解析する

PythonでHTMLを解析する場合、「HTMLParser」を利用することが一般的です。

しかしながら、その他に使い勝手のよいHTML解析ツールがあるのでそれらを利用しても便利です。


beautifulsoup4を利用する。

インストールします。


pip install beautifulsoup4

BeautifulSoup()関数で解析を行います。


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


import urllib.request
from bs4 import BeautifulSoup


url = "http://capm-network.com"
req = urllib.request.urlopen(url)

html = req.read().decode('UTF-8')
req.close()

soup = BeautifulSoup(html)
print(soup.title.string)    # CapmNetwork
print(soup.find('a'))       # <a href="/">Capm Network</a>

要素の検索はfind()またはfind_all()を用います。


soup.find('a')       # 最初に見つかったリンク先を取得します。
soup.find_all('a')   # 全てのリンク先を取得します。

全てのリンク先を表示する場合、下記のように解析すると便利です。


for link in soup.find_all('a'):
    print(link.get('href'))

idやクラスでも検索できます。クラスは「class_」なので注意が必要です。


soup.find(id='footer')
soup.find_all(class_='nav')


関連ページ