見出し画像

Beautifulsoupのfind_allメソッドの戻り値はtagオブジェクトのリスト

今日は、『独習Python入門』第9章で学んだことのアウトプットです。

サイドバーの「メニュー」のスクレイピング

会社案内の右側にある「メニュー」の項目を1行ずつprint関数で表示する練習問題に取り組みました。
HTMLタグは次のとおりです。

<div class="list-group">
       	<a href="#" class="list-group-item">トップページ</a><br>
       	<a href="/company" class="list-group-item">会社案内</a><br>
       	<a href="/company/greeting" class="list-group-item">代表挨拶</a><br>
       	<a href="/services/advisory_engineer" class="list-group-item">顧問エンジニアによるITコンサルティング</a><br>
       	<a href="/services/handy" class="list-group-item">展示会の注文管理サービス Handy</a><br>
       	<a href="/services/mod99" class="list-group-item">業務システム自動生成フレームワーク MOD99</a><br>
       	<a href="/category/advisory_engineer_column" class="list-group-item">IT活用虎の巻</a><br>
       	<a href="/dokushu-python-support" class="list-group-item">独習Python入門サポートページ</a><br>
       	<a href="/contact" class="list-group-item">お問い合わせ</a>
       </div>

3段階に分けて考える

①まずサイドバー全体を囲っているdivタグを抽出
②divタグの中に含まれているaタグすべてを配列で取得
③②で取得した配列を繰り返して、タグの中にあるテキストを取得

①のサイドバー全体を囲っているdivタグを抽出する関数は、Beautifulsoupのfindメソッドを使用します。

②の部分は、find_allメソッドを使用します。find_allメソッドは、指定された基準に一致するTagオブジェクトのリストを戻り値として返します。

③のaタグの中にある文字列は、「.string」を使って取得します。

以下がコードになります。

import urllib.request
from bs4 import BeautifulSoup
req = urllib.request.urlopen('http://quality-start.in/company/')
soup = BeautifulSoup(req, 'html.parser')
# ①サイドバー全体を囲っているdivタグを抽出
side_menu = soup.find("div", class_="list-group")
# ②divタグの中に含まれているaタグすべてを配列で取得する
tag_list = side_menu.find_all("a")
# ②で取得した配列を繰り返して、タグの中にあるテキストを取得
for a_tag in tag_list:
   print(a_tag.string)

サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪