【Python】BeautifulSoupでhrefの値を取得する【スクレイピング】
目次
- BeautifulSoup4でリンク要素のhrefを取得したい
- BeautifulSoupのインスタンスを生成
- findなどを使ってリンク要素を取得
- タグのgetでリンク要素のhref属性の値を取得して出力
- 関連記事
BeautifulSoup4でリンク要素のhrefを取得したい
PythonのライブラリBeautifulSoup4
を使ってリンク要素のhref
属性の値を取得したい場合は、↓のようにします。
:::python
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
属性の値を取得したい場合は、以下のような手順で処理を行います。
BeautifulSoupのインスタンスを生成
findなどを使ってリンク要素を取得
タグのgetでリンク要素のhref属性の値を取得
ひとつずつ具体的に見ていきましょう。
BeautifulSoupのインスタンスを生成
BeautifulSoup
をインポートしてパース対象のHTMLからインスタンスを生成します。
このとき、BeautifulSoup
クラスの第1引数にパース対象のHTML, 第2引数に内部パーサーを指定します。
:::python
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
などを使って取得します。
:::python
# findを使ってリンク要素を取得
link = soup.find('a')
複数の要素を取得したい場合はfind_all
かselect
が使えます。
:::python
# find_allを使ってリンク要素を複数取得
links = soup.find_all('a')
find
とfind_all
の詳しい使い方については↓の記事をご確認ください。
select
を使う場合はセレクターにより柔軟にタグを取得できます。これも戻り値はリストに似た戻り値です。
:::python
# selectを使ってリンク要素を複数取得
links = soup.select('html > body > a.link')
select
の詳しい使い方については↓の記事をご確認ください。
タグのgetでリンク要素のhref属性の値を取得して出力
find
などを使ってタグを取得出来たら、あとはタグのメソッドであるget
を使って属性値を取得します。
:::python
# getでリンク要素のhref属性の値を取得して出力
print(link.get('href'))
get
は第1引数の属性名が存在しない場合はNone
を返します。
:::python
print(link.get('nothing'))
:::text
None
また、第2引数にデフォルト値を指定することが出来ます。
デフォルト値を指定しておくと、第1引数の属性名が存在しない場合にget
はデフォルト値を返してくれます。
:::python
print(link.get('nothing', 'default value'))
:::text
default value
関連記事
- BeautifulSoupの美しさを知りませんでした。実際に使ってみるまでは - narupoのブログ
- Python3 + Selenium + BeautifulSoup4: Chromeドライバを利用した実装例 - narupoのブログ
- 【Python】BeautifulSoupでclassを指定して要素を取得する方法【スクレイピング】 - narupoのブログ
- 【Python】BeautifulSoupのfindとfind_allの使い方【スクレイピング】 - narupoのブログ
- 【Python】BeautifulSoupのselectの普通の使い方【スクレイピング】 - narupoのブログ
- 【Python】BeautifulSoupでhrefの値を取得する【スクレイピング】 - narupoのブログ