BeautifulSoup4でリンクを取得する方法

2019年12月19日

みなさまおはこんばんにちは、せなです

今回はBeautifulSoup4を使ってリンクを取得する方法を説明したいと思います

リンクを取得

まず、リンクは「href」に設定されているかと思います
BeautifulSoupでは特定のタグの文字列を取得したい時にはfind_all()メソッドなどの検索用メソッドを使用して取得します

以下のコードをご覧ください

from bs4 import BeautifulSoup

html = """<p id="site"><a href="https://senablog.com/">せなブログ</a></p>
<a href="https://senablog.com/category/programming/" class="category" id="tag1">プログラミング</a>
<a href="https://senablog.com/category/programming/python/" class="category" id="tag2">Python</a>
<a href="https://senablog.com/category/zakki/" class="category" id="tag3">雑記</a>
</html>
"""

soup = BeautifulSoup(html, 'html.parser')
tag_list = soup.select('a[href]')
for tag in tag_list:
    url = tag.get('href')
    print(url)

#https://senablog.com/
#https://senablog.com/category/programming/
#https://senablog.com/category/programming/python/
#https://senablog.com/category/zakki/

今回の場合、find_all()メソッドを使用すると「soup.find_all('a')」のように書き方になってしまいます
その場合、hrefを書いていない不要なaタグまで取得してしまい、無駄な処理が発生してしまいます

それを防ぐために使用しているのが、select()メソッドです
select()メソッドは色々な使い方ができるためここでの説明は省きますが、find_all()メソッドなどと違い柔軟に検索することができるので、非常に便利です

以下の記事にselect()メソッドについて書いていますので、良ければ参考にしてください

リンク:BeautifulSoup4のselect()メソッドの使い方について

最後に

BeautifulSoup4でのリンクを取得する方法を説明させていただきました

最初はfind_all()を使えばいいのでは?と思っていましたが、よくよく調べてみると
select()の方が厳密な指定が出来て無駄な処理を行わずに済むと思います

ここまで読んで下さり、ありがとうございました
この記事がお役に立てれば幸いです
ではでは~