PythonでWebページのリンク一覧を取得する方法

IT・プログラミング

Webスクレイピングを行う際、ページ内のリンク一覧を取得したいことがあります。この記事では、Pythonの BeautifulSoup を使って、ページ内の <a> タグからリンク(href 属性)とテキストを抽出する方法を解説します。

必要なライブラリ

まず、スクレイピングに必要な BeautifulSoup を含む bs4 をインストールします。

pip install beautifulsoup4 requests

基本的なリンクの取得方法

以下のHTMLを例に、すべての <a> タグからリンクテキストとURLを取得します。

サンプルHTML

<a href="https://example.com/article1.html">記事1</a>
<a href="https://example.com/article2.html">記事2</a>
<a href="https://example.com/article3.html">記事3</a>

Pythonコード

from bs4 import BeautifulSoup
import requests

# スクレイピング対象のURL
url = "https://example.com"
response = requests.get(url)

# BeautifulSoupでHTMLを解析
soup = BeautifulSoup(response.text, "html.parser")

# すべてのaタグを取得し、辞書に格納
data_dict = {a.text.strip(): a["href"] for a in soup.find_all("a") if a.get("href")}

# 結果を表示
print(data_dict)

出力結果(例)

{
    '記事1': 'https://example.com/article1.html',
    '記事2': 'https://example.com/article2.html',
    '記事3': 'https://example.com/article3.html'
}

特定のクラスを持つリンクのみ取得する

特定のクラス(例: class="article-link")を持つリンクのみ取得したい場合は、soup.find_all("a", class_="article-link") を使います。

サンプルHTML

<a href="https://example.com/article1.html" class="article-link">記事1</a>
<a href="https://example.com/article2.html" class="article-link">記事2</a>
<a href="https://example.com/contact.html">お問い合わせ</a>

Pythonコード

data_dict = {a.text.strip(): a["href"] for a in soup.find_all("a", class_="article-link")}

出力結果(例)

{
    '記事1': 'https://example.com/article1.html',
    '記事2': 'https://example.com/article2.html'
}

CSSセレクタを使ってリンクを取得する

CSSセレクタを使うと、より柔軟にリンクを抽出できます。

data_dict = {a.text.strip(): a["href"] for a in soup.select("a.article-link")}

select("a.article-link")<a class="article-link"> を持つすべての要素を取得します。

まとめ

方法 取得対象
soup.find_all("a") ページ内のすべてのリンク
soup.find_all("a", class_="class名") 特定のクラスを持つリンク
soup.select("CSSセレクタ") CSSセレクタで指定したリンク

スクレイピングでWebページ内のリンクを効率よく取得したい場合、これらの方法を活用してみてください!

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