本文へスキップ
BecomeCoder

Pythonスクレイピングコース · 第4章 データを抽出して整形する · レッスン14

URLとテキストを整える

ブラウザで完結

導入

取れたデータは、そのままだと使いにくいことがよくあります。リンクが相対パスだったり、文字の前後に余計な空白や改行が入っていたり。最後のひと手間で整えます。

説明

from bs4 import BeautifulSoup
from urllib.parse import urljoin

base = "https://example.com/list"
html = """
<a href="/items/apple">  りんご
</a>
<a href="../items/orange">みかん</a>
"""

soup = BeautifulSoup(html, "html.parser")

for a in soup.find_all("a"):
    text = a.text.strip()                 # 前後の空白・改行を除去
    url = urljoin(base, a.get("href"))    # 相対URL → 絶対URL
    print(f"{text} : {url}")
  • a.text.strip()文字列前後の空白・改行・タブを取り除きます。HTMLの整形で入った余白を消す定番です。
  • urljoin(base, href) … 基準URL(いま見ているページ)と相対パスを合わせて、完全なURLを組み立てます。/items/apple../items/orange を正しく解決してくれます。

実行結果:

りんご : https://example.com/items/apple
みかん : https://example.com/items/orange

urljoin は「/ 始まりはドメイン直下」「../ は1つ上の階層」といったルールを自分で計算せずに済ませてくれます。リンク集めでは必須の道具です。

やってみよう

a.text.strip().strip() を外すと、りんごの前後に空白や改行が残ることが分かります。スクレイピングで取れた文字列は「まず strip()」を癖にすると、後の処理がきれいになります。

演習

base"https://shop.example.com/page/2" に変えて実行し、相対パスがその新しいドメインに合わせて解決されることを確かめてください。

ヒント1を見る

base の文字列を書き換えるだけです。urljoin が新しいドメインを基準に絶対URLを作り直します。

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、本物の BeautifulSoup(Pyodide)でHTMLの解析をその場で試せます。初回だけ読み込みに少し時間がかかります。本文のHTMLを書き換えたり、抜き出すタグを変えたりして、結果の変化を確かめましょう(ネットからの取得は第5章の読み物で解説します)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。