スポンサーリンク

コードが書ける!数式が書ける!AAが書ける!スタンプが貼れる!

無料の匿名掲示板型SNS「このはちゃんねる

新規会員募集中!

【Python】BeautifulSoupでhrefの値を取得する【スクレイピング】

271, 2019-12-27

目次

BeautifulSoup4でリンク要素のhrefを取得したい

PythonのライブラリBeautifulSoup4を使ってリンク要素のhref属性の値を取得したい場合は、↓のようにします。

from bs4 import BeautifulSoup

# パース対象のHTML
html = '''
<a href="http://example.com"></a>
'''

# BeautifulSoupのインスタンスを生成
soup = BeautifulSoup(html, 'html.parser')

# findを使ってリンク要素を取得
link = soup.find('a')

# getでリンク要素のhref属性の値を取得して出力
print(link.get('href'))

href属性の値を取得したい場合は、以下のような手順で処理を行います。

  1. BeautifulSoupのインスタンスを生成
  2. findなどを使ってリンク要素を取得
  3. タグのgetでリンク要素のhref属性の値を取得

ひとつずつ具体的に見ていきましょう。

BeautifulSoupのインスタンスを生成

BeautifulSoupをインポートしてパース対象のHTMLからインスタンスを生成します。
このとき、BeautifulSoupクラスの第1引数にパース対象のHTML, 第2引数に内部パーサーを指定します。

from bs4 import BeautifulSoup

# パース対象のHTML
html = '''
<a href="http://example.com"></a>
'''

# BeautifulSoupのインスタンスを生成
soup = BeautifulSoup(html, 'html.parser')

選択できる内部パーサーは↓の通りです。

  • html.parser
  • lxml HTMLパーサー
  • lxml XMLパーサー
  • html5lib

特に問題なければhtml.parserを指定しておけばOKです。
html.parserを指定した場合、BeautifulSoupは、Pythonの標準ライブラリhtml.parserを使ってパースします。
その他のパーサーは外部ライブラリなのでpip等でインストールが必要です。詳細については↓の記事をチェックしてください。

findなどを使ってリンク要素を取得

インスタンスを生成したらhref属性を持っている要素をfindなどを使って取得します。

# findを使ってリンク要素を取得
link = soup.find('a')

複数の要素を取得したい場合はfind_allselectが使えます。

# find_allを使ってリンク要素を複数取得
links = soup.find_all('a')

findfind_allの詳しい使い方については↓の記事をご確認ください。

selectを使う場合はセレクターにより柔軟にタグを取得できます。これも戻り値はリストに似た戻り値です。

# selectを使ってリンク要素を複数取得
links = soup.select('html > body > a.link')

selectの詳しい使い方については↓の記事をご確認ください。

タグのgetでリンク要素のhref属性の値を取得して出力

findなどを使ってタグを取得出来たら、あとはタグのメソッドであるgetを使って属性値を取得します。

# getでリンク要素のhref属性の値を取得して出力
print(link.get('href'))

getは第1引数の属性名が存在しない場合はNoneを返します。

print(link.get('nothing'))
None

また、第2引数にデフォルト値を指定することが出来ます。
デフォルト値を指定しておくと、第1引数の属性名が存在しない場合にgetはデフォルト値を返してくれます。

print(link.get('nothing', 'default value'))
default value

関連記事

投稿者名です。64字以内で入力してください。

必要な場合はEメールアドレスを入力してください(全体に公開されます)。

投稿する内容です。

スポンサーリンク

スポンサーリンク

スポンサーリンク

スポンサーリンク