【中級編3】PythonでWebページの様々なデータを抜き出そう

Python入門

今回は、PythonでWebページの様々な情報を抜き出す方法を解説します。

今まではWebページのデータを丸ごと表示していましたが、本記事を読むことで、一部分のみを表示できます。

これができれば一気に実用的なスクレイピングに近づきます。

ぜひやり方を覚えてみてくださいね。

Webページから情報を抜き出すには、BeautifulSoupモジュールが必要

BeautifulSoupとは、HTMLデータを解析するためのモジュールです。

このモジュールを使うことで、簡単にHTMLからデータを取り出すことができます

モジュールに関して詳しく知りたい方は、【初級編10】pythonの標準ライブラリ一覧を紹介!を読んでください。

もちろん、使わなくても正規表現を使えばできるのですが、それだと大変なので、BeautifulSoupを使うのをおすすめします。

BeautifulSoupモジュールを使う場合、以下のようにソースの冒頭にimport文を記述してください。

○コード例

from bs4 import BeautifulSoup

これでBeautifulSoupモジュールが使えるようになりました。

Pythonで様々なデータを抜き出す方法

PythonでHTMLから、様々なデータを抜き出す方法をご紹介しましょう。

以下の項目に分けて、やり方を解説します。

  • タイトルを抜き出す
  • リンクを抜き出す
  • 特定のクラスを抜き出す

タイトルを抜き出す

まず、HTMLからタイトル部分だけを抜き出す方法を解説しましょう。

Webページには必ずタイトルが付けられています。

タイトルは「title」というタグを使って記入されています。

タイトルを抜き出すには次のように記述します。

○コード例

import requests
from bs4 import BeautifulSoup

site_data = requests.get("https://news.yahoo.co.jp/")
soup = BeautifulSoup(site_data.text, 'html.parser')
print(soup.title)

○実行結果

まず、いつもどおりgetメソッドでWebページを取得します。

BeautifulSoupメソッドで、HTMLを解析します。

第一引数に解析したいHTML、第二引数に「’html.parser’」を記入することが可能です。

解析が完了したら「.title」を付けることで、タイトルのみを表示できます。

ただ、これだとタイトルタグも一緒に表示されていますね。

そこで、タグを除外する方法も紹介しましょう。

○コード例

import requests
from bs4 import BeautifulSoup

site_data = requests.get("https://news.yahoo.co.jp/")
soup = BeautifulSoup(site_data.text, 'html.parser')
print(soup.title.string)

○実行結果

上記のように「.string」を付けると、タグが除外されます。

リンクを抜き出す

つづいて、リンクを抜き出す方法を解説しましょう。

HTMLでリンクを表す場合、a href~と記述します。

そのため、a要素をHTMLから抜き出せばよいのです。

○コード例

import requests
from bs4 import BeautifulSoup

site_data = requests.get("https://news.yahoo.co.jp/")
soup = BeautifulSoup(site_data.text, 'html.parser')
print(soup.find("a"))

○実行結果

HTMLから特定の要素を抜き出す場合は、findメソッドを使います

findメソッドで「a」を指定することで、a要素のみが抜け出せるため、リンクのみが取り出せます。

こちらも先程同様「.string」を付ければ、タグの中身だけが出力されます。

findメソッドは、1番最初の要素のみを取り出します。

全ての要素を取り出す場合は、find_allメソッドを使います。

○コード例

import requests
from bs4 import BeautifulSoup

site_data = requests.get("https://news.yahoo.co.jp/")
soup = BeautifulSoup(site_data.text, 'html.parser')
print(soup.find_all("a"))

○実行結果

これでHTML内全てのリンクを取り出すことに成功しました。

特定のクラスを抜き出す

最後にHTMLから指定したclass属性のみを抜き出す方法を解説します。

特定のクラスを抜き出す場合は、selectメソッドを使います

○コード例

import requests
from bs4 import BeautifulSoup

site_data = requests.get("https://news.yahoo.co.jp/")
soup = BeautifulSoup(site_data.text, 'html.parser')

print(soup.select(".logo"))

○実行結果

上記の例ではselectメソッドによって、「class=”logo”」の部分のみが表示されています。

findメソッドとselectメソッドは良く使うので、一緒に覚えておきましょう。

findメソッドが特定の要素を取り出すのに対し、selectメソッドは特定のクラスを取り出します

まとめ

本記事では、Webページから様々なデータを取り出す方法を解説しました。

findメソッドやselectメソッド、「.title」、「.string」などの使い方がお分かり頂けたかと思います。

BeautifulSoupモジュールを使うことで、HTMLを解析でき、簡単にHTMLの一部を抜き出すことが可能です。

次回は、抜き出したデータをテキストにまとめる、という本格的なスクレイピングのやり方をみていきましょう。

挫折率が高い??プログラミング学習のポイント
駆け出しエンジニアが一緒に学ぶ
CANITは、Progateやドットインストールで独学している人達同士をつなげます。駆け出しエンジニアのあなたのためのSNSです。
Python入門
【この記事を書いた人】
谷津弘樹

某自社開発のIT企業に勤めていた元webプログラマーです。主にサーバーサイド側を担当し、phpを使った開発経験があります。現在は退職しフリーランスライターとして活動中。IT系の記事を主に執筆し生計を立てています。

CANIT
タイトルとURLをコピーしました