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ページ内のリンクを効率よく取得したい場合、これらの方法を活用してみてください!