darkproxyscrape ロゴ

初心者のためのウェブスクレイピング:Pythonを使った基礎とフレームワーク

パイソン, スクレイピング, マー0120215分で読める

Web scraping is the art of extracting data from a website in an automated and well-structured form. There could be different formats for scraping data like excel, CSV, and many more. Some practical use cases of web scraping are market research, price monitoring, price intelligence, market research, and lead generation. Web scraping is an instrumental

ウェブスクレイピングとは、ウェブサイトからデータを自動化された構造化された形で抽出する技術である。データをスクレイピングするためのフォーマットは、エクセルやCSVなど様々です。Webスクレイピングの実用的な使用例としては、市場調査、価格モニタリング、価格インテリジェンス、市場調査、リードジェネレーションなどがある。ウェブスクレイピングは、一般に公開されているデータを最大限に活用し、よりスマートな意思決定を行うための手段である。だから、ウェブスクレイピングの恩恵を受けるために、誰もが少なくともウェブスクレイピングの基本を知っておくことは素晴らしいことだ。

この記事では、Beautiful Soupと呼ばれるPythonのフレームワークを使いながら、ウェブスクレイピングの基本について説明する。コーディング環境はGoogle Colabを使用します。

Pythonを使ったWebスクレイピングの手順

  1. まず最初に、スクレイピングしたいウェブページを特定し、そのURLにHTTPリクエストを送る必要がある。それに応答して、サーバーはウェブページのHTMLコンテンツを返します。このタスクのために、python-requestsを扱うサードパーティのHTTPライブラリを使います。
  2. HTMLコンテンツへのアクセスに成功したら、次はデータの解析だ。HTMLデータのほとんどは入れ子構造になっているため、文字列処理だけではデータを処理できない。そこでHTMLデータの入れ子構造を作るパーサーの出番となる。最も先進的なHTMLパーサー・ライブラリのひとつにhtml5libがある。
  3. 次にツリー・トラバーサルを行う。これはパース・ツリーのナビゲートと検索を行う。この目的のために、Beautiful Soup(サードパーティのPythonライブラリ)を使用する。このPythonライブラリは、HTMLやXMLファイルからデータを取り出すために使用される。

さて、ここまででウェブスクレイピングのプロセスがどのように機能するか見てきた。さっそくコーディングを始めよう、

ステップ1:サードパーティライブラリのインストール

ほとんどの場合、Colabにはサードパーティパッケージがすでにインストールされています。しかし、それでもimport文が機能しない場合は、以下のコマンドでいくつかのパッケージをインストールすることで、この問題を解決することができます、 

pipinstallrequests
pipinstallhtml5lib
pipinstallbs4

ステップ2:ウェブページからHTMLコンテンツにアクセスする

インポートリクエスト 
URL = "http://www.values.com/inspirational-quotes"
r =requests.get(URL) 
print(r.content)

フォームの出力が表示される、

このコードを理解してみよう、

  1. コードの最初の行では、requestsライブラリをインポートしている。
  2. 次に、スクレイピングしたいウェブページのURLを指定する。
  3. 3行目のコードでは、指定されたURLにHTTPリクエストを送信し、サーバーからのレスポンスをrというオブジェクトに保存している。
  4. 最後にprint(r.content)は、ウェブページの生のHTMLコンテンツを返す。

ステップ3:HTMLコンテンツの解析

インポートリクエスト 
frombs4 import BeautifulSoup 
  
URL ="http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content,'html5lib') # この行でエラーが発生する場合は'pip install html5lib'実行 するか、html5libをインストールしてください。 
print(soup.prettify())

出力:

以下にスクリーンショットを添付する。

ビューティフル・スープの最大の特徴の一つは、html5lib、html.parse、lxmlなどのHTMLパーシング・ライブラリ上に構築されているため、ビューティフル・ソープのオブジェクトとパーサー・ライブラリを同時に作成できることです。 

上のコードでは、2つの引数を渡してビューティフル・スープ・オブジェクトを作成している:

r.content:生のHTMLコンテンツ。

html5lib:使用するHTMLパーサーを指定します。

最後に、soup.prettify()が出力され、生のHTMLコンテンツから解析ツリーを視覚的に表現する。

ステップ4:解析ツリーの検索とナビゲート

今度は、HTMLコンテンツから有用なデータを抽出する番だ。スープ・オブジェクトは、入れ子構造の形でデータを含んでおり、さらにプログラムで抽出することができる。私たちのケースでは、いくつかの引用符で構成されるWebページをスクレイピングしています。そこで、これらの引用句を解決するプログラムを作成します。コードを以下に示す、

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

この先に進む前に、soup.prettify()メソッドを使って出力したウェブページのHTMLコンテンツに目を通し、引用句にナビゲートするパターンを探してみることをお勧めする。

では、上記のコードでどのようにこれを実現するかを説明しよう、 

引用符の中をナビゲートすると、すべての引用符がidが'all_quotes'のdivコンテナの中にあることがわかります。そこで、find()メソッドを使ってそのdiv要素(コードではtableと呼ぶ)を見つける:

table = soup.find('div', attrs = {'id':'all_quotes'})

この関数の最初の引数は、検索が必要なHTMLタグである。find()メソッドは、最初にマッチした要素を返します。table.prettify()を試してみると、このコードが何をするのかよくわかるだろう。

table要素に注目すると、divコンテナにはclassがquoteである引用文がそれぞれ含まれています。そこで、classがquoteである各divコンテナをループします。

findAll()メソッドは、引数に関する限りfind()メソッドと似ているが、大きな違いは、マッチするすべての要素のリストを返すことである。 

rowという変数を使って各見積もりを反復している。

理解を深めるために、HTMLの行内容のサンプルを分析してみよう:

次のコードを考えてみよう:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

ここでは、見積もりに関するすべての情報を保存する辞書を作成している。入れ子構造にアクセスするためにドット記法を使用しています。HTML要素内のテキストにアクセスするには、.textを使用します:

さらに、タグの属性を追加、削除、変更、アクセスすることもできます。タグを辞書として扱うことで、これを実現しました:

quote['url']= row.a['href']

そして、すべての引用符をquotesというリストに追加した。 

最後に、データを保存するために使用するCSVファイルを生成します。

ファイル名='inspirational_quotes.csv'

ファイル名をinspirational_qoutes.csvとし、将来も使えるようにすべての名言を保存した。inspirational_quotes.csvファイルはこんな感じです、

上の出力では3行しか表示していないが、実際には33行ある。つまり、簡単な試行だけで、ウェブページからかなりの量のデータを抽出できたことになる。 

注意:場合によっては、ウェブスクレイピングは違法とみなされ、ウェブサイトによってあなたのIPアドレスが永久にブロックされる可能性があります。そのため、スクレイピングを許可しているウェブサイトやウェブページのみに注意する必要があります。 

なぜウェブスクレイピングを使うのか?

ウェブスクレイピングが大活躍しそうな現実世界のシナリオには、次のようなものがある、

リード・ジェネレーション

ほとんどの企業にとって重要な営業活動のひとつが、リードの創出だ。Hubspotのレポートによると、インバウンドマーケッターの61%がトラフィックとリードの生成を最優先事項としている。Webスクレイピングは、マーケティング担当者がインターネット上の構造化されたリードリストにアクセスできるようにすることで、その役割を果たすことができる。

市場調査 

正しい市場調査を行うことは、ビジネスを行う上で最も重要な要素であり、そのためには精度の高い情報が必要となる。市場分析は、様々なサイズや形状の、大量かつ高品質で洞察力の高いウェブスクレイピングによって促進されている。このデータは、ビジネス・インテリジェンスを行う上で非常に有用なツールとなる。市場調査の主な焦点は、次のようなビジネス面である:

  • 市場動向の分析にも使える。
  • 市場価格を予測するのに役立つ。
  • 顧客のニーズに応じてエントリーポイントを最適化することができる。
  • 競合他社を監視するのに非常に役立つ。

リスティング広告の作成

Webスクレイピングは、例えば不動産やeコマースストアなど、ビジネスの種類に応じてリスティングを作成するための非常に便利で実りあるテクニックとなり得る。ウェブのスクレイピングツールは、ビジネスが自分のストア上の競合製品の何千ものリストを参照し、価格、製品の詳細、バリアント、レビューのようなすべての必要な情報を収集するのに役立ちます。それはわずか数時間で行うことができ、さらに独自のリスティング広告を作成するのに役立つため、顧客の需要により集中することができる。

情報を比較する

ウェブスクレイピングは、様々なビジネスが情報を収集・比較し、そのデータを有意義な形で提供するのに役立つ。他の様々なウェブサイトからレビューや特徴、あらゆる重要な詳細を抽出する価格比較ウェブサイトを考えてみよう。これらの詳細は、簡単にアクセスできるように編集し、調整することができます。そのため、購入者が特定の製品を検索する際に、さまざまな小売業者からリストを生成することができる。したがって、ウェブスクレイピングは、消費者の需要に応じて様々な製品分析を表示することにより、消費者の意思決定プロセスをはるかに容易にします。

集合情報

ウェブのスクレイピングは、情報を集約し、整理された形でユーザーに表示するのに役立つ。ニュース・アグリゲーターの場合を考えてみよう。ウェブ・スクレイピングは次のような使い方をする、

  1. ウェブスクレイピングを使えば、最も正確で関連性の高い記事を集めることができる。
  2. 役に立つビデオや記事のリンクを集めるのに役立つ。
  3. ニュースに従ってタイムラインを構築する。
  4. ニュースの読者に応じたトレンドを捉える。

そこでこの記事では、ウェブスクレイピングがどのように機能するのか、実用的なユースケースを考慮して詳しく分析した。また、Pythonで簡単なウェブスクレイパーを作成する練習もしました。これで、好きな他のウェブサイトをスクレイピングすることができます。さらに、ウェブスクレイピングが重要な役割を果たす実際のシナリオもいくつか見てきました。この記事を楽しんでいただき、すべてが明確で興味深く、理解しやすかったことを願っています。  

あなたのウェブスクレイピングプロジェクトのための素晴らしいプロキシサービスをお探しなら、以下をお忘れなく。 ProxyScrape住宅と プレミアムプロキシ.