[Python]BeautifulSoupでClassとDivからhrefを抽出 !

Pythonには、Webスクレイピングやデータ収集に便利なライブラリがあります。その中でも特に有名なのがBeautifulSoupです。今回は、BeautifulSoupを使ってClassとDivからhrefを抽出する方法について解説していきます。

BeautifulSoupの基本的な使い方

BeautifulSoupは、HTMLやXMLのデータを解析するためのライブラリです。このライブラリを使うことで、Webページから必要な情報を抽出することができます。

まずは、BeautifulSoupをインストールして、基本的な使い方を確認しましょう。

pip install beautifulsoup4

インストールが完了したら、Pythonのコード内でBeautifulSoupをインポートします。

from bs4 import BeautifulSoup

次に、解析したいHTMLデータを読み込みます。ここでは、例として以下のHTMLデータを使用します。

<html>
  <head>
    <title>Example</title>
  </head>
  <body>
    <p class="example">This is an example.</p>
    <a href="http://example.com">Link</a>
  </body>
</html>

このHTMLデータをBeautifulSoupで解析するには、以下のようにコードを記述します。

html = '''
<html>
  <head>
    <title>Example</title>
  </head>
  <body>
    <p class="example">This is an example.</p>
    <a href="http://example.com">Link</a>
  </body>
</html>
'''
soup = BeautifulSoup(html, 'html.parser')

BeautifulSoupには、HTMLの解析に使用するパーサーを指定する必要があります。ここでは、html.parserを使用しています。

classとdivの説明

HTMLには、classとdivという要素があります。classは、同じ種類の要素にスタイルを適用するために使用される属性です。divは、HTML内の特定の範囲をグループ化するために使用される要素です。

例えば、以下のようなHTMLコードがあった場合、class=”example”が設定されているpタグには同じスタイルが適用されます。

<p class="example">This is an example.</p>
<p class="example">This is another example.</p>

また、以下のようにdivタグを使用することで、HTML内の特定の範囲をグループ化することができます。

<div>
  <p>This is a paragraph.</p>
</div>

hrefの説明

hrefとは、HTML内でリンクを設定するために使用される属性です。hrefには、リンク先のURLを指定する必要があります。

例えば、以下のようなaタグがあった場合、href属性に指定されたURLにリンクされます。

<a href="http://example.com">Link</a>

BeautifulSoupでclassとdivからhrefを抽出する方法

BeautifulSoupを使ってclassとdivからhrefを抽出するには、以下のようなコードを記述します。

from bs4 import BeautifulSoup
html = '''
<html>
  <head>
    <title>Example</title>
  </head>
  <body>
    <div class="example">
      <a href="http://example.com">Link</a>
    </div>
    <div class="example">
      <a href="http://example2.com">Link2</a>
    </div>
  </body>
</html>
'''
soup = BeautifulSoup(html, 'html.parser')
# Classがexampleの要素からhrefを抽出する
for link in soup.find_all('div', class_='example'):
    print(link.a.get('href'))
# Div内のaタグからHrefを抽出する
for div in soup.find_all('div', class_='example'):
    print(div.a.get('href'))

このコードでは、Classがexampleの要素からhrefを抽出する方法と、Div内のaタグからhrefを抽出する方法の2つを紹介しています。

なお、classやdivの指定は、find_allメソッドの引数で指定することができます。また、hrefを抽出するには、aタグのgetメソッドを使用します。

実際のコード例とその説明

実際に、WebページからClassとDivからhrefを抽出するプログラムを作成してみましょう。

以下のようなHTMLデータがあった場合、Classが”entry-title”の記事タイトルのリンク先を抽出するプログラムを記述します。

<html>
  <head>
    <title>Example</title>
  </head>
  <body>
    <div class="entry">
      <h2 class="entry-title"><a href="http://example.com/article1">Article 1</a></h2>
      <p class="entry-content">This is an article.</p>
    </div>
    <div class="entry">
      <h2 class="entry-title"><a href="http://example.com/article2">Article 2</a></h2>
      <p class="entry-content">This is another article.</p>
    </div>
  </body>
</html>

以下のようなPythonコードを記述して、Classが”entry-title”の記事タイトルのリンク先を抽出します。

from bs4 import BeautifulSoup
import requests
url = 'http://example.com'
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
# Classが"entry-title"のaタグからhrefを抽出する
for link in soup.find_all('h2', class_='entry-title'):
    print(link.a.get('href'))

このコードでは、requestsを使ってWebページを取得し、BeautifulSoupを使って解析しています。Classが”entry-title”のaタグからhrefを抽出するために、find_allメソッドでClassを指定し、aタグのgetメソッドでhrefを取得しています。

BeautifulSoupでclassとdivからhrefを抽出する際の注意点

BeautifulSoupを使ってclassとdivからhrefを抽出する際には、以下のような注意点があります。

  • classやdivの指定には、正確な文字列が必要です。
  • 複数のclassやdivを指定する場合は、空白区切りで指定します。
  • classやdivの指定は、大文字と小文字が区別されます。

まとめ

BeautifulSoupを使ってclassとdivからhrefを抽出する方法について解説しました。Webスクレイピングやデータ収集には、BeautifulSoupが非常に便利なライブラリです。今回の記事を参考にして、自分のプログラムに応用してみてください。