paint-brush
Python Web Scraper を構築する方法: 任意の Web サイトからデータをスクレイプする@terieyenike
8,557 測定値
8,557 測定値

Python Web Scraper を構築する方法: 任意の Web サイトからデータをスクレイプする

Teri4m2022/09/08
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

Python では、Python スクリプトを使用して Web サイトからデータをスクレイピングまたはグラブできます。このデータ収集方法は、Web スクレイピングと呼ばれます。ほとんどの Web サイトは、ユーザーがデータをスクレイピングすることを望んでいません。スクレイピングが合法で許可されているものを確認するために、ウェブサイトには、許可されているエンドポイントの詳細を示す専用ページがあります。この演習では、ニュース コンテンツのホームページをスクレイピングします。これは、ユーザー エージェントに従って実行できます。スクリプト全体を作成すると、ページは YCombinator のニュース ホームページからデータをスクレイピングする必要があります。
featured image - Python Web Scraper を構築する方法: 任意の Web サイトからデータをスクレイプする
Teri HackerNoon profile picture

この記事では、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()
    機能は、提供された Web サイトのリンクから HTML ファイルをダウンロードします。
  • でウェブページのコンテンツを読む
    .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
    BeautifulSoup 関数を使用し、
     html.parser
    HTMLファイルを取得するには

コードの残りの部分に進む前に、次のリンクを使用して Web ブラウザーを開きましょう。

 .get()

次に、ページを右クリックし、検査をクリックして、 YCombinatorニュース ページの要素タブを表示します。

Web ページは次のようになります。

Beautiful Soup を使用すると、ページ上の特定の要素をそのクラス名でターゲットにすることができます。

  • article_tag 変数を割り当てることにより、すべてのページ要素には、
     find()
    要素の名前タグ、および
    class_
    アンダースコア付き。これは、Web ページ上の要素のクラスが上書きされるのを防ぐために行われます。
  • ここで、リンク タイトルの 1 つを抽出します。
     article_tag
    を使用して
    .get_text()
    関数
  • 次に、のリンクを抽出します
    article_tag
    属性の使用
    href
    とともに
    .get()
    関数
  • 同じことが
    article_upvote
    変数、タグ名、
     <span>
    、およびクラス名は、各記事リンクのポイントを抽出するために使用されます
  • 抽出されたデータをキーと値のペアを持つディクショナリとして表示する変数結果を作成します
  • 最終結果を印刷する

スクリプト全体を記述すると、ページは YCombinator のニュース ホームページからデータをスクレイピングし、次のようになります。

結論

この記事では、Python Web スクレイパーを使用して Web ページからデータを抽出する方法を説明しました。

また、Web スクレイパーを使用する機能は、手作業よりも迅速に大規模なデータ セットを作成する際の時間と労力を節約できることです。

もっと詳しく知る