この記事では、Python スクリプトを使用して Web サイトからデータをスクレイピングまたはグラブできるプログラムを作成します。このデータ収集方法は、Web スクレイピングと呼ばれます。
Webスクレイピングとは、Pythonまたはその他のプログラミング言語をプログラムで使用して、Webページからデータをダウンロード、クリーニング、および使用することです。ほとんどの Web サイトは、データのスクレイピングを望んでいません。スクレイピングが合法で許可されているものを確認するために、ウェブサイトには、許可されているエンドポイントの詳細を示す専用ページがあります。
リンクの最後に robots.txt を添付して、許可されているエンドポイントを確認します。たとえば、 https://news.ycombinator.com/robots.txtを使用してみましょう。
以下のテキスト ファイルを使用すると、結果は次のようになります。
スクリーンショットには、YCombinator Web サイトからのスクレイピングが許可されているエンドポイントと許可されていないエンドポイントが示されています。クロールの遅延とは、プログラムを使用して Web サイトからデータをスクレイピングするときに一時停止することを意味します。これにより、絶え間ないスクレイピングのためにサーバーに過負荷がかかり、Web サイトの速度が低下することはありません。
この演習では、ニュース コンテンツのホームページをスクレイピングします。これは、ユーザー エージェントに従って実行できます。
入門
Python Web スクレイパーには、データをスクレイピングするために必要な 2 つのモジュールが必要です。
- 美しいスープ
- リクエスト
美しいスープ
Beautiful Soup は、HTML ファイルからデータを抽出するための Python ライブラリです。パーサーを使用してファイルを変更し、データを貴重なドキュメントに変換し、プログラマーの手動および反復作業の時間を節約します。
リクエスト
requests HTTP ライブラリは、Web サイトへのリンクを使用して HTML ファイルをダウンロードするためのものです。
.get()
関数。Web スクレーパーの作成
では、このプロジェクトの核心に迫ります。新しいディレクトリを作成し、そこに Web スクレイパー プログラムのすべてのスクリプトを含むファイルを作成します。
次のコードをコピーして貼り付けます。
# app.py import requests response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text print(yc_web_page)
上記のコードは次のことを行います。
- のインポート
モジュールrequests
- 応答変数を使用して、
.get()
- でウェブページのコンテンツを読む
.text
コマンド python でこのコードを実行すると
app.py
出力はありません。これは、インポートされた 2 つのモジュールをインストールする必要があることを意味します。次のコマンドを実行して、モジュールをインストールします。
pip3 install requests pip install beautifulsoup4
ソース コードの結果は次のようになります。
次は更新してみましょう
app.py
美しいスープを使用して残りのコードを含むファイル: # main.py import requests from bs4 import BeautifulSoup # add this
response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text # add this
soup = BeautifulSoup(yc_web_page, 'html.parser' ) article_tag = soup.find(name= "a" , class_= 'titlelink' ) article_title = article_tag.get_text() article_link = article_tag.get( 'href' ) article_upvote = soup.find(name= "span" , class_= "score" ).get_text() result = { "title" : article_title, "link" : article_link, "point" : article_upvote } print(result)
上記のコード スニペットに従って、次の操作を行います。
- モジュールbs4から BeautifulSoup 関数をインポートする
- 次に、変数soupを使用して、
yc_web_page
html.parser
コードの残りの部分に進む前に、次のリンクを使用して Web ブラウザーを開きましょう。
.get()
次に、ページを右クリックし、検査をクリックして、 YCombinatorニュース ページの要素タブを表示します。
Web ページは次のようになります。
Beautiful Soup を使用すると、ページ上の特定の要素をそのクラス名でターゲットにすることができます。
- article_tag 変数を割り当てることにより、すべてのページ要素には、
find()
アンダースコア付き。これは、Web ページ上の要素のクラスが上書きされるのを防ぐために行われます。class_
- ここで、リンク タイトルの 1 つを抽出します。
article_tag
関数.get_text()
- 次に、のリンクを抽出します
属性の使用article_tag
とともにhref
関数.get()
- 同じことが
変数、タグ名、article_upvote
<span>
- 抽出されたデータをキーと値のペアを持つディクショナリとして表示する変数結果を作成します
- 最終結果を印刷する
スクリプト全体を記述すると、ページは YCombinator のニュース ホームページからデータをスクレイピングし、次のようになります。
結論
この記事では、Python Web スクレイパーを使用して Web ページからデータを抽出する方法を説明しました。
また、Web スクレイパーを使用する機能は、手作業よりも迅速に大規模なデータ セットを作成する際の時間と労力を節約できることです。