Python BeautifulSmokeを使用したWebスクラップ


何がウェブスクラップですか?


ウェブサイトからデータを抽出するには主に2つの方法があります.
  • ウェブサイトのAPIを使用します.たとえば、FacebookはFacebook上で投稿されたデータの検索を可能にするFacebook Graph APIを持っている.
  • WebページのHTMLにアクセスし、有用な情報/データを抽出します.このテクニックは、ウェブ・スクレーピングまたはウェブ収穫またはウェブ・データ抽出と呼ばれています.
    このブログでは、美しいスープと呼ばれるPythonのウェブを掻くようなフレームワークの実装を使用してWebスクレーピングに関与する手順について説明します.
  • はじめに


    我々は、BeautiFookieと呼ばれるシンプルで強力なライブラリと一緒に、我々のスクレーピング言語としてPythonを使用するつもりです.
    Macユーザーのための
  • 、パイソンは、OS XオープンターミナルとタイプPython --バージョンであらかじめインストールされます.あなたのPythonのバージョンが3.6(私のためのショー)であるのを見るべきです.
  • Windowsユーザーのための
  • 、公式ウェブサイトを通してパイソンをインストールしてください.
  • 次に、Python用のパッケージ管理ツールPIPを使ってBeautifulSpyライブラリを取得する必要があります.
  • コマンドプロンプトで
    pip install BeautifulSoup4
    
    注意:上記のコマンドラインを実行しない場合は、各行の前にsudoを追加してみてください.

    廃棄規則及び規制


    スクラップを始める前に、どんなサイトでもスクラップするための規則と規則について知る必要があります.ちょうど任意のサイトからデータをスクラップとしてランダムサイトをスクラップを開始する前にポイント以下を読む合法的ではありません.以下の点に従ってください.
  • ウェブサイトの条件をチェックする必要があります.データの法的使用についての声明を読むことに注意してください.通常、あなたがscrapeするデータは、商業目的のために使われてはいけません.
  • ウェブサイトからあまりにも積極的にあなたのプログラム(スパムとして知られている)でデータを要求しないでください、これがウェブサイトを壊すかもしれません.プログラムが適切な方法で動作するようにしてください.1秒あたりの1つのウェブページの1つの要求は良い実行です.
  • ウェブサイトのレイアウトは時々変わるかもしれないので、サイトを再訪して、必要に応じてあなたのコードを書き直すようにしてください.
  • Webスクラッピングに必要な手順


  • アクセスするWebページのURLにHTTPリクエストを送信します.サーバは、ウェブページのHTML内容を返すことによって、要求に応答する.このタスクでは、サードパーティのHTTPライブラリをPythonリクエストに使用します.cmdを使ってリクエストをインストールするpip install requests

  • HTMLコンテンツにアクセスしたら、データを解析するタスクを残します.HTMLデータのほとんどは入れ子になっているので、文字列処理を通してデータを取り出すことはできません.つは、HTMLデータの入れ子/ツリー構造を作成できるパーサーが必要です.HTMLパーサーライブラリが利用可能ですが、最も進んだものはHTML 5 libです.Cmdを使ってHTML 5 libをインストールします.pip install html5lib
  • 現在、我々がする必要があるのは、我々が作成した解析木、すなわち木の横断線をナビゲートして検索することです.このタスクのために、我々は別のサードパーティ製のPythonライブラリ、美しいスープを使用されます.これは、HTMLやXMLファイルからデータを引き出すためのPythonライブラリです.BSS 4のインストールが完了しました.
  • ちょっと下の画像を見て、スクラップをする方法を理解してください.

    COVID - 19データのスクラップ


    我々は、サイトのworldometerからテーブルの形式でデータを抽出されます.このコードは次のように記述します.
    コード
    # importing modules
    import requests
    from bs4 import BeautifulSoup
    
    # URL for scrapping data
    url = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/'
    
    # get URL html
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')
    
    
    data = []
    
    # soup.find_all('td') will scrape every element in the url's table
    data_iterator = iter(soup.find_all('td'))
    # data_iterator is the iterator of the table
    
    # This loop will keep repeating till there is data available in the iterator
    while True:
        try:
            country = next(data_iterator).text
            confirmed = next(data_iterator).text
            deaths = next(data_iterator).text
            continent = next(data_iterator).text
    
            # For 'confirmed' and 'deaths', make sure to remove the commas and convert to int
            data.append((
                country,
                int(confirmed.replace(', ', '')),
                int(deaths.replace(', ', '')),
                continent
            ))
    
        # StopIteration error is raised when there are no more elements left to iterate through
        except StopIteration:
            break
    
    # Sort the data by the number of confirmed cases
    data.sort(key = lambda row: row[1], reverse = True)
    
    # create texttable object
    table = tt.Texttable()
    table.add_rows([(None, None, None, None)] + data) # Add an empty row at the beginning for the headers
    table.set_cols_align(('c', 'c', 'c', 'c')) # 'l' denotes left, 'c' denotes center, and 'r' denotes right
    table.header((' Country ', ' Number of cases ', ' Deaths ', ' Continent '))
    
    print(table.draw())
    
    コードの出力は次のようになります.

    結論


    BeautiFoomライブラリについての本当に良いことはHTML 5 lib、lxml、htmlのようなHTML解析ライブラリの上部に構築されていることです.パーサなど、BeautifulSpecオブジェクトを指定し、パーサライブラリを指定することもできます.
    それで、これはPythonでウェブスクレーパーを作成する簡単な例です.ここから、あなたの選択の他のウェブサイトをスクラップしようとすることができます.任意のクエリの場合は、コメントセクションで以下のように投稿してください.

    あなたが以下のリンクで見ることができる私の他のブログ:


    ハッピーコーディング!チアーズ.