Pythonで特定のページのH1(見出し)を取得する方法!Webスクレイピングの勉強

PythonでH1(見出し)を取得できるようになりたいと思います。

Pythonで特定のサイトのH1(見出し)を取得する方法

URLを指定して表示されるページのH1を取得したいと思います。

環境

Python IDLEを使用

ライブラリ BeautifulSoup

BeautifulSoup4のインストール方法

BeautifulSoup4はpipのコマンドでインストール可能です。

Win

pip install beautifulsoup4

Mac

pip3 install beautifulsoup4

H1(見出し)を取得する

サンプルコードを見ながら取得する手順を追います。

サンプルコード

# BeautifulSoupをインポート
import requests
from bs4 import BeautifulSoup

#「手っ取り早くPython3.xをダウンロードして使ってみる(Mac)!はじめてのPython」のURLを指定
url = "https://programmer-life.work/python/use-python3-mac"

# ページのHTML(ソース)を取得
html = requests.get(url)

# BeautifulSoupで解析
soup = BeautifulSoup(html.content, "html.parser")

# h1タグの文字列を解析データから見つけて表示
print(soup.find("h1").text)

parserの意味は解析です。beautifulsoupにこのhtmlを解析してとお願いしています。

Run 実行結果

手っ取り早くPython3.xをダウンロードして使ってみる(Mac)!はじめてのPython

h1タグ内の文字列のみ表示されました。.textを省略した場合はタグごと表示されます。

print(soup.find("h1").text)のh1の箇所でタグを指定していますが、どんなタグを指定しても取得できます。(h2, aタグなど)。もしHTML内で複数タグが使われていた場合は最初に使われているタグが取得できます。

IDやクラスを指定したい場合

IDやクラスを指定したい場合はprint(soup.find("h1").text)のh1の箇所をid="xxx"やclass_="xxx"のように書きます。「class」ではなく「class_」なことに注意

クラスを指定した場合の例

print(soup.find(class_="entry-title").text)

全ての指定したタグを表示する場合

全ての指定したタグを表示する場合はprint(soup.find("h1").text)では行えないので、処理を分割しfor文で文字列のみを取得します。

サンプルコード

# BeautifulSoupをインポート
import requests
from bs4 import BeautifulSoup

#「手っ取り早くPython3.xをダウンロードして使ってみる(Mac)!はじめてのPython」のURLを指定
url = "https://programmer-life.work/python/use-python3-mac"

# ページのHTML(ソース)を取得
html = requests.get(url)

# BeautifulSoupで解析
soup = BeautifulSoup(html.content, "html.parser")

# h2タグを解析データから全て見つけて表示
for element in soup.find_all("h2"):
    print(element.text)

※ for文でprintの前に見やすくなるようにスペースを設けていますが、コピペの場合はPython側のエディタでスペースを付け直してください。コピペのままだとエラーになります。

Run 実行結果

環境
Pythonをダウンロードする
IDLE.appを起動する
おわり
よろしければシェアお願いします
関連記事
ディスカッション

終わり

特定のサイトのH1を特定のドメイン配下を自動で実施して、全ページのH1を取得するのが最終目標ですが先は長そう。

参考サイト

PythonでHTMLを解析してデータ収集してみる? スクレイピングが最初からわかる『Python 2年生』

Python

Posted by Nakamoto