Web スクレイピングは、Web サイトから情報を抽出し、それを特定のユースケースに使用するというアイデアです。
Web ページからテーブルを抽出して JSON ファイルに変換し、その JSON ファイルを内部ツールの構築に使用しようとしているとします。 Web スクレイピングを利用すると、Web ページ内の特定の要素をターゲットにして、必要なデータを抽出できます。 Python を使用した Web スクレイピングは、データを効果的に抽出するための BeautifulSoup や Scrapy などの複数のライブラリを Python が提供しているため、非常に人気のある選択肢です。
データを効率的に抽出するスキルを持つことも、開発者またはデータ サイエンティストとして非常に重要です。この記事は、Web サイトを効果的にスクレイピングし、必要に応じて Web サイトを操作するために必要なコンテンツを取得する方法を理解するのに役立ちます。このチュートリアルでは、 BeautifulSoup パッケージを使用します。これは、Python でデータをスクレイピングするためのトレンディーなパッケージです。
Web スクレイピングに Python を使用する理由
Python は、多くの開発者にとって、Web スクレイパーを構築する際の最初の選択肢です。 Python が最初の選択肢となる理由はたくさんありますが、この記事では、データ スクレイピングに Python が使用される主な 3 つの理由について説明します。
ライブラリとコミュニティのサポート: BeautifulSoup、Scrapy、Selenium など、Web ページを効果的にスクレイピングするための優れた機能を提供する優れたライブラリがいくつかあります。 Web スクレイピングのための優れたエコシステムを構築しています。また、世界中の多くの開発者がすでに Python を使用しているため、行き詰まったときにすぐにヘルプを得ることができます。
自動化: Python は自動化機能で有名です。スクレイピングに依存する複雑なツールを作成しようとしている場合は、Web スクレイピング以上のものが必要です。たとえば、オンライン ストアの商品の価格を追跡するツールを構築したい場合は、毎日の価格を追跡してデータベースに追加できるように、自動化機能を追加する必要があります。 Python を使用すると、このようなプロセスを簡単に自動化できます。
データの視覚化: Web スクレイピングはデータ サイエンティストによって頻繁に使用されます。データ サイエンティストは、多くの場合、Web ページからデータを抽出する必要があります。 Pandas のようなライブラリを使用すると、Python は生データからのデータ視覚化をより簡単にします。
Python での Web スクレイピング用のライブラリ
Python では、Web スクレイピングを簡単にするために利用できるライブラリがいくつかあります。ここでは最も人気のある 3 つのライブラリについて説明します。
#1. 美しいスープ
Web スクレイピング用の最も人気のあるライブラリの 1 つ。 BeautifulSoup は、 2004 年以来、開発者による Web ページのスクレイピングを支援してきました。これは、解析ツリーをナビゲート、検索、変更するための簡単な方法を提供します。 Beautifulsoup 自体も、受信データと送信データのエンコードを行います。よく維持されており、素晴らしいコミュニティがあります。
#2. スクレイピー
データ抽出のためのもう 1 つの人気のあるフレームワーク。 Scrapy に は GitHub 上に 43000 を超えるスターが付いています。 API からデータを収集するためにも使用できます。また、電子メールの送信など、いくつかの興味深い組み込みサポートもあります。
#3. セレン
Selenium は 主に Web スクレイピング ライブラリではありません。代わりに、これはブラウザ自動化パッケージです。ただし、Web ページをスクレイピングするためにその機能を簡単に拡張できます。さまざまなブラウザを制御するために WebDriver プロトコルを使用します。 Selenium は 20 年近く市場に出回っています。しかし、Selenium を使用すると、Web ページからデータを簡単に自動化し、収集することができます。
Python Webスクレイピングの課題
Web サイトからデータを収集しようとすると、多くの課題に直面する可能性があります。遅いネットワーク、スクレイピング対策ツール、IP ベースのブロック、キャプチャ ブロックなどの問題があります。これらの問題は、Web サイトをスクレイピングしようとすると大きな問題を引き起こす可能性があります。
ただし、いくつかの方法に従うことで、問題を効果的に回避できます。たとえば、ほとんどの場合、特定の時間間隔で一定量を超えるリクエストが送信されると、Web サイトによって IP アドレスがブロックされます。 IP ブロッキングを回避するには、リクエストの送信後に冷却するようにスクレイパーをコーディングする必要があります。
開発者はスクレーパーのためにハニーポット トラップを設置する傾向もあります。これらの罠は通常、人間の肉眼では見えませんが、スクレーパーで這うことができます。このようなハニーポット トラップを設置する Web サイトをスクレイピングしている場合は、それに応じてスクレイパーをコーディングする必要があります。
キャプチャはスクレイパーに関するもう 1 つの深刻な問題です。現在、ほとんどの Web サイトではキャプチャを使用して、ボットによるページへのアクセスを保護しています。このような場合、キャプチャ ソルバーの使用が必要になる場合があります。
Python を使用して Web サイトをスクレイピングする
先ほど説明したように、BeautifulSoup を使用して Web サイトをスクラップします。このチュートリアルでは、Coingecko からイーサリアムの履歴データをスクレイピングし、テーブル データを JSON ファイルとして保存します。スクレーパーの構築に進みましょう。
最初のステップは、BeautifulSoup と Requests をインストールすることです。このチュートリアルでは、 Pipenv を 使用します。 Pipenv は、Python の仮想環境マネージャーです。必要に応じて Venv を使用することもできますが、私は Pipenv を好みます。 Pipenv についての説明は、このチュートリアルの範囲を超えています。ただし、Pipenv の使用方法を知りたい場合は、 このガイド に従ってください。または、Python 仮想環境を理解したい場合は、このガイドに従ってください。
コマンド Pipenv shell を実行して、プロジェクト ディレクトリで
pipenv shell
を起動します。仮想環境でサブシェルが起動されます。次に、BeautifulSoup をインストールするには、次のコマンドを実行します。
pipenv install beautifulsoup4
また、インストール リクエストの場合は、上記と同様のコマンドを実行します。
pipenv install requests
インストールが完了したら、必要なパッケージをメイン ファイルにインポートします。
main.py
というファイルを作成し、以下のようにパッケージをインポートします。
from bs4 import BeautifulSoup
import requests
import json
次のステップでは、履歴データ ページのコンテンツを取得し、BeautifulSoup で利用可能な HTML パーサーを使用してそれらを解析します。
r = requests.get('https://www.coingecko.com/en/coins/ethereum/historical_data#panel')
soup = BeautifulSoup(r.content, 'html.parser')
上記のコードでは、リクエスト ライブラリで使用可能な
get
メソッドを使用してページにアクセスします。解析されたコンテンツは、
soup
という変数に保存されます。
ここからオリジナルのスクレイピング部分が始まります。まず、DOM 内でテーブルを正しく識別する必要があります。
このページ
を開いて、ブラウザで利用可能な開発者ツールを使用して調べると、テーブル
table table-striped text-sm text-lg-normal
というクラスがあることがわかります。
このテーブルを正しくターゲットにするには、
find
メソッドを使用できます。
table = soup.find('table', attrs={'class': 'table table-striped text-sm text-lg-normal'})
table_data = table.find_all('tr')
table_headings = []
for th in table_data[0].find_all('th'):
table_headings.append(th.text)
上記のコードでは、まず、
soup.find
メソッドを使用してテーブルが検索され、次に
find_all
メソッドを使用して、テーブル内のすべての
tr
要素が検索されます。これらの
tr
要素は、
table_data
という変数に格納されます。テーブルにはタイトルのいくつか
th
要素があります。
table_headings
と呼ばれる新しい変数は、リスト内のタイトルを保持するために初期化されます。
次に、テーブルの最初の行に対して for ループが実行されます。この行では、
th
を持つすべての要素が検索され、そのテキスト値が
table_headings
リストに追加されます。テキストは
text
メソッドを使用して抽出されます。ここで
table_headings
変数を出力すると、次の出力が表示されます。
['Date', 'Market Cap', 'Volume', 'Open', 'Close']
次のステップでは、残りの要素を取得し、行ごとに辞書を生成し、行をリストに追加します。
for tr in table_data:
th = tr.find_all('th')
td = tr.find_all('td')
data = {}
for i in range(len(td)):
data.update({table_headings[0]: th[0].text})
data.update({table_headings[i+1]: td[i].text.replace('\n', '')})
if data.__len__() > 0:
table_details.append(data)
これはコードの重要な部分です。
table_data
変数内の各
tr
について、最初に
th
要素が検索されます。
th
要素は、表に示されている日付です。これらの
th
要素は変数
th
内に格納されます。同様に、すべての
td
要素は
td
変数に格納されます。
空の辞書
data
初期化されます。初期化後、
td
要素の範囲をループします。各行について、まず、辞書の最初のフィールドを
th
の最初の項目で更新します。コード
table_headings[0]: th[0].text
日付と最初の
th
要素のキーと値のペアを割り当てます。
最初の要素を初期化した後、
data.update({table_headings[i+1]: td[i].text.replace('\\n', '')})
使用して他の要素が割り当てられます。ここでは、最初に
text
メソッドを使用して
td
要素のテキストが抽出され、次に
replace
メソッドを使用してすべての
\\n
が置き換えられます。 i 番目の要素はすでに割り当てられているため、値は
table_headings
リストの
i
i+1
番目の要素に割り当てられます。
次に、
data
ディクショナリの長さがゼロを超える場合、そのディクショナリを
table_details
リストに追加します。
table_details
リストを印刷して確認できます。ただし、値を JSON ファイルに書き込みます。このコードを見てみましょう。
with open('table.json', 'w') as f:
json.dump(table_details, f, indent=2)
print('Data saved to json file...')
ここでは
json.dump
メソッドを使用して、
table.json
という JSON ファイルに値を書き込みます。書き込みが完了したら、
Data saved to json file...
コンソールに出力します。
次に、次のコマンドを使用してファイルを実行します。
python run main.py
しばらくすると、コンソールに「JSON ファイルに保存されたデータ」というテキストが表示されるようになります。作業ファイル ディレクトリには、table.json という新しいファイルも表示されます。ファイルは次の JSON ファイルのようになります。
[
{
"Date": "2022-11-27",
"Market Cap": "$145,222,050,633",
"Volume": "$5,271,100,860",
"Open": "$1,205.66",
"Close": "N/A"
},
{
"Date": "2022-11-26",
"Market Cap": "$144,810,246,845",
"Volume": "$5,823,202,533",
"Open": "$1,198.98",
"Close": "$1,205.66"
},
{
"Date": "2022-11-25",
"Market Cap": "$145,091,739,838",
"Volume": "$6,955,523,718",
"Open": "$1,204.21",
"Close": "$1,198.98"
},
// ...
// ...
]
Python を使用して Web スクレイパーを正常に実装しました。完全なコードを表示するには、この GitHub リポジトリ にアクセスしてください。
結論
この記事では、単純な Python スクレイピングを実装する方法について説明しました。 BeautifulSoup を使用して Web サイトからデータを迅速にスクレイピングする方法について話し合いました。また、他の利用可能なライブラリと、多くの開発者が Web サイトをスクレイピングする際に Python が最初の選択肢となる理由についても説明しました。
これらの Web スクレイピング フレームワークも参照してください。






![2021 年に Raspberry Pi Web サーバーをセットアップする方法 [ガイド]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)



![リップルを安全に保つためのベスト XRP ウォレット 14 選 [2023]](https://i3.wp.com/assets-cdn.trustwallet.com/blockchains/ripple/info/logo.png?w=1200&resize=1200,0&ssl=1)

