[Python3]Webスクレイピングで繰り返し構造のデータを取得する

公開日: : Python, 自動化

スポンサーリンク

Python3のBeautifulSoup4でWebスクレイピングをしました。パッと調べた感じだとaタグだけを取得するといったものなどのシンプルなサンプルが多く、今回divタグなどを使った繰り返しのブロック構造をループで再帰的に取得したかったのですが、ちょっと苦戦しましたのでやり方を載せておきます。

環境

Python 3.6
requestsモジュールやbeautifulsoup4が必要なのでそれぞれpipで取得しておきました。また、Pythonの環境はPycharmをAnacondaと連携させて使っています。

サンプル

サンプルでは文字列としたHTMLを準備して動作の確認を行いました。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import requests
import bs4
import sys
import time

html = """
<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <h1>サンプル</h1>
    <div id="contents">
        <div class="entry">
            <div class="header"><a href="http://example.com/">Example Domain</a></div>
        </div>
        <div class="entry">
            <div class="header"><a href="https://www.yahoo.co.jp/">Yahoo!</a></div>
        </div>
        <div class="entry">
            <div class="header"><a href="http://b.hatena.ne.jp/">はてなブックマーク</a></div>
        </div>  
        <div class="entry">
            <div class="header"><a href="https://togetter.com/">togetter</a></div>
        </div>     
    </div>  
  </body>
</html>
"""

if __name__ == "__main__":
        # Web上からスクレイピングする場合
        # url = "http://~"
        # res = requests.get(url)
        # soup = bs4.BeautifulSoup(res.text, "html.parser")

        # html文字列から取得
        soup = bs4.BeautifulSoup(html, "html.parser")
        h = soup.select(".entry")
        for s in h:
            t = s.select(".header a")[0]
            href = t.get('href')
            text = t.get_text()
            print(href)
            print(text)
http://example.com/
Example Domain
https://www.yahoo.co.jp/
Yahoo!
http://b.hatena.ne.jp/
はてなブックマーク
https://togetter.com/
togetter

selectをうまく使って無事思い通りのスクレイピングができました。正直この例であればaタグを直接取ってこればいいのですが、headerクラスに日付やカテゴリなどの別の情報がある場合でもこの方法でブロックごとに取得してくることができます。
実際にWeb上から取得する場合はコメントアウトしている箇所を参考に取得してきてください。

また、今回はあまり関係ないかもしれませんが、同じサイトを連続的にスクレイピングする場合はある程度sleep処理などで時間を待ってから次のアクセスに移るのが一般的なので負荷をかけすぎないようご注意ください。

スポンサーリンク
Amazon

  • このエントリーをはてなブックマークに追加

関連記事

無料のDAZ Studioに課金しまくってわかったこと

はじめに  初めにお断りしておきますがこれから書く意見はあくまで素人

[最後のレストラン]ジャンヌ「出来らあっ!」

はじめに 「スーパーくいしん坊」という漫画の有名なシーンがこちら

[日本株]特定の個別銘柄の大株主一覧をネットで見る方法

 個別株を購入する際に大株主情報をネットで検索して参考にしようと思った

[DAZ Studio]目線をカメラに向ける方法

DAZ Studioでフィギュアの目線をカメラに向ける方法についてです

[TortoiseGit]ブランチ作成とマージの方法(ローカル)

 私はGitを使うときはTortoiseGitを利用しているのですが、

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。