前回はWEB上のデータを取得作業を行いました。しかし、スクレイピングで抜き出したWebデータはHTMLタグがいっぱいあって人間が見るとかなり見にくいです。そこで今日は取得したデータを見やすいように整形していきます。
PythonでのHTMLの分析にはBeautiful Soup
PythonでHTMLデータを分析するには「beautiful soup」というライブラリーが便利です。「Beautiful Soup」とは、「requests」で取得したHTMLデータを解析するためのライブラリです。
「Beautiful Soup」にはHTMLを解析するための様々なメゾットやセレクタがあるため、より効率的に解析することができます。
BeautifulSoupのインストール
コマンドプロンプトから「 pip install beautifulsoup4 」でインストールします。
# beautiful soupのインストール $ pip install beautifulsoup4
requestsがない人は一緒にインストールしておいてください。anacondaで環境構築している人は既にインストールされているので問題ありません
関連記事:【Python】Anacondaのインストールと初期設定から便利な使い方までを徹底解説!
関連記事:PythonでのWebスクレイピングには「requests」がめっちゃ便利という話
BeautifulSoupの使い方
# ライブラリの呼び出し import requests from bs4 import BeautifulSoup # YahooのサイトのHTMLを取得 r = requests.get('https://www.yahoo.co.jp/') # 取得したHTMLデータをBeautifulSoupで解析できる形に変換 yahoo=BeautifulSoup(r.text,'html.parser')
二つ目の引数は解析の種類を表しています。他にもあるみたいですが効率を気にせずとりあえず解析してる俺スゲーしたいってだけならこれで問題ないと思います。
そしてBeautifulSoup が返してくれる変数には検索しやすいメソッドが含まれています。find()は引数で指定したタグを検索して最初にヒットしたものを返してくれます。
# htmlデータの中から最初のaタグを抽出する yahoo.find('a')
<実行結果>
<a href=”https://www.yahoo-help.jp/”><nobr>ヘルプ</nobr></a>
他にも画像を検索したいときは、画像はimgタグなのでyahoo.find('img')
にするとできます。
そして、htmlの中から特定のタグを含む要素を全て検索したいときはfind_all()を使います。戻り値で返ってくる検索結果はリストで返されます。
# htmlの中からaタグを含むものを全て取得する yahoo.find_all('a')
<実行結果>
[<a href=”https://www.yahoo-help.jp/“><nobr>ヘルプ</nobr></a>, <a href=”https://www.yahoo-help.jp/app/answers/detail/p/533/a_id/43883“>Internet Explorerの互換表示について</a>, <a href=”https://tourdetohoku.yahoo.co.jp/storyteller/2018/“>被災地・宮城で聞いた「未来につなげたい思い」とは</a>, <a href=”https://rdsig.yahoo.co.jp/smptop/event/201803_bousai/pctl/RV=1/RU=aHR0cHM6Ly9ib3VzYWkueWFob28uY28uanAvcHIvMjAxODAzLw–“>あなたの防災力は何点?「全国統一防災模試」に挑戦</a>,…
終わり
大体使うのはリンク(a)・画像(img)・表/テーブル(table) でしょう。ループを組み合わせると自動化処理ができますね。
PythonでのスクレイピングやBeautifulSoupの使い方は下の「Pythonによるスクレイピング&機械学習開発テクニック増補改訂」という本が分かりやすかったので、紹介しておきます。
関連記事:【Python】CoinGeckoのAPIからビットコイン・アルトコインの価格データを取得する
コメント