PythonによるWebスクレイピングチュートリアル:ヒントとコツ

パイソン, スクレイピング, 12月 -0520215分で読める

ウェブスクレイピングを使ってウェブサイトから大量のデータを自動的に抽出し、データベースやファイルに保存することができる。スクレイピングされたデータは、主にスプレッドシートや表形式で保存することができます。Webスクレイピングは、Webデータ抽出Webハーベスティングとも呼ばれます。手作業によるスクレイピングは面倒な作業であるため、ウェブスクレイピングが必要とされている。

目次

ウェブスクレイピングを使ってウェブサイトから大量のデータを自動的に抽出し、データベースやファイルに保存することができる。スクレイピングされたデータは、主にスプレッドシートや表形式で保存することができます。Webスクレイピングは、Webデータ抽出Webハーベスティングとも呼ばれます。手作業でのスクレイピングは面倒な作業で、完了するまでに数時間から数日かかることもある。そのため、プロセスを自動化し、わずかな時間でウェブサイトからデータを抽出する必要があります。

Webスクレイピングソフトウェアを使用すると、ニーズや要件に基づいて自動的にWebサイトの複数のページからデータをロード、クロール、抽出することができます。つまり、ボタンをクリックするだけで、ウェブサイトから必要なデータを取得できるのです。現代社会では、企業はデータを分析し、インテリジェントなアクションを実行する必要があります。しかし、ウェブサイトの所有者がIP禁止やCAPTCHAなどのテクニックを採用している場合、ウェブサイトからデータを取得することが難しいことがあります。プロキシサーバーやVPNを使えば、匿名でウェブからデータをスクレイピングできるので、この問題を克服することができる。 

なぜウェブスクレイピングが必要なのか?

世界中の企業がウェブからデータをスクレイピングし、利用可能な形式で保存することで有益な洞察を得ている。様々な業界におけるウェブスクレイピングの長所のいくつかを以下に示す。

  • ウェブスクレイピングは、機械学習プロジェクトのための訓練データとテストデータセットを収集する。
  • eコマースでは、競合他社の価格をモニターするためにウェブスクレイピングが使われる。
  • ウェブ・スクレイピングは、不動産業界で物件や所有者・エージェントの詳細を得るために使用される。
  • マーケティングでは、ウェブスクレイピングは、コールドアウトリーチのための電話リストやEメールリストの構築に使用される。

以下は、ウェブからデータをスクレイピングする主な理由である。

自動化の実現 - 堅牢なウェブスクレイパーを使用することで、ウェブサイトからデータを抽出することができる。こうすることで、平凡なデータ収集作業から時間を節約することができます。ウェブスクレイピングを使えば、人間一人では到底不可能な量のデータを収集することができます。さらに、PythonやJavascriptなどのプログラミング言語を使用するか、ウェブスクレイピングツールを使用して、オンライン活動を自動化するための洗練されたウェブボットを作成することもできます。

豊富でユニークなデータセット - インターネットから豊富な量の画像、ビデオ、テキスト、数値データを得ることができます。また、目的に応じて、関連するウェブサイトを検索し、分析用のカスタム・データセットを作成することもできます。例えば、英国のスポーツ市場を深く理解したいとします。ウェブスクレイパーをセットアップして、ビデオコンテンツやサッカーの統計情報を収集することができます。

効率的なデータ管理 - ウェブ・スクレイピングで様々なウェブサイトからデータを正確に収集できるため、インターネットからデータをコピー・アンド・ペーストする必要がありません。このように、自動化されたソフトウェアやプログラムによって効率的にデータを保存することで、企業や従業員はより多くの時間を創造的な仕事に費やすことができます。

ビジネスインテリジェンスと洞察 - インターネットからのウェブスクレイピングにより、以下のことが可能になります:

  • 競合他社のマーケティング活動の監視
  • 競合他社の価格検索
  • 市場の全体像を把握する

さらに、大量のデータをダウンロード、クリーニング、分析することで、企業はより良い意思決定を行うことができる。

スピード - ウェブスクレイピングは、ウェブサイトから非常に高速にデータを抽出します。数日ではなく数時間でデータをスクレイピングすることができます。しかし、プロジェクトによっては、その複雑さや、それを達成するために使用するリソースやツールによって時間がかかる場合があります。

データの正確性 - ウェブサイトからの手作業によるデータ抽出は、人為的なミスを伴い、深刻な問題につながる。そのため、どのような情報であれ、正確なデータ抽出が非常に重要であり、ウェブスクレイピングでそれを達成することができます。

Pythonでウェブスクレイピング

このウェブサイトからデータを抽出する必要があるとする。requestsとBeautifulSoupという2つのPythonモジュールをインストールする必要があります。 

ライブラリのインポート

これらのモジュールは以下のコマンドでインストールできる。

pipinstallrequests
!pipinstallBeautifulSoup

これらのモジュールは

frombs4importBeautifulSoup
インポートリクエスト

ウェブサイトの左上にあるInspectボタンをクリックして、抽出したい要素をハイライトすることができます。私たちのケースでは、以下のようにこのサイトのテーブルデータを抽出したい。

ヘッダーとURLの追加

リクエストにヘッダーとURLを追加しなければならない。ヘッダは、リクエストが正規のブラウザから来たように見えるように、あなたのリクエストを外すことができます。 

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}

url = "https://en.wikipedia.org/wiki/List_of_national_capitals"

requests.get()関数を使えば、指定したURLにGETリクエストを送ることができる。

r = requests.get(url,headers=headers)

ビューティフル・スープ・オブジェクト

BeautifulSoupオブジェクトを初期化し、そのパラメータを指定する必要があります。次に、テーブルのすべての行を抽出する必要があります。以下のコードに示すように、find_all()メソッドを使用することで、すべてのテーブル要素を取得できます。

soup= BeautifulSoup(r.content,"html.parser")
table= soup.find_all('テーブル')[1].
rows= table.find_all('tr')
row_list= list()

行を繰り返し処理する

以下のコードに示すように、forループを使ってテーブルのすべての行を繰り返し処理することができる。

for tr inrows:
   td=tr.find_all('td')
    row =[i.text for i in td] (i.テキスト for i in td)
    row_list.append(row)

データフレームの作成

Pandasデータフレームを作成し、データを.csvファイルにエクスポートすれば、抽出されたデータを明確に視覚化することができます。データフレームを作成するには、以下のように Pandas をインポートする必要があります。

pdとしてpandasをインポートする

これで、スープ・オブジェクトを、以下のテーブル行を含むデータフレームに変換することができる。

  • 都市
  • 国名
  • 備考

以下のように、データフレームをcsv形式に変換し、データフレームを印刷することができます。

df_bs = pd.DataFrame(row_list,columns=['City','Country','Notes'])
df_bs.set_index('Country',inplace=True)
df_bs.to_csv('beautifulsoup.csv')
プリント(df_bs)

以下の出力が得られる。

Pythonを使ったWebスクレイピングのためのプロキシ

プロキシは、クライアントとサーバーの間の仲介者または仲立ちとして機能します。あなたの本当のIPアドレスを隠し、フィルターや検閲を回避します。以下のステップで示すように、Pythonの関数を使うだけで、プロキシの無料リストを取得することができる。

ライブラリのインポート

Pythonで以下のモジュールをインポートする必要があります。

frombs4importBeautifulSoup
インポートリクエスト
インポートランダム

関数を定義する

get_free_proxy()関数を定義することができ、その中で無料プロキシリストのURLを指定しなければならない。その後、BeautifulSoupオブジェクトを作成し、requests.get()関数を使用してHTTPレスポンスを取得する必要があります。 

defget_free_proxies():
    url ="https://free-proxy-list.net/"
    soup =bs(requests.get(url).content,"html.parser")
    プロキシ = [].

Forループを使う

forループの中でfind_all()メソッドを使えば、以下のようにすべてのテーブル行を繰り返し処理することができる。

for row in soup.find("table", attrs={"id": "proxylisttable"}).find_all("tr")[1:]:
        tds = row.find_all("td")
        try:
            ip = tds[0].text.strip()
            port = tds[1].text.strip()
            host = f"{ip}:{port}"
            proxies.append(host)
        except IndexError:
            continue
    return proxies

現役プロキシ一覧

以下に紹介するようなプロキシのリストを挙げることができる。

プロキシ = [
    '167.172.248.53:3128',
   '194.226.34.132:5555',
   '203.202.245.62:80',
    '141.0.70.211:8080',
    '118.69.50.155:80',
    '201.55.164.177:3128',
   '51.15.166.107:3128',
   '91.205.218.64:80',
    '128.199.237.57:8080',
]

リクエストセッション

プロキシのリストを受け取る関数get_session()を作成する必要があります。また、以下のコードに示すように、渡されたプロキシのいずれかをランダムに選択するリクエストセッションを作成します。

def get_session(proxies):
  session = requests.Session()
  proxy = random.choice(proxies)
  session.proxies = {"http": proxy, "https": proxy}
  return session

リクエスト

forループを使ってウェブサイトにリクエストを行い、そのお返しにIPアドレスを取得することができる。

for i in range(5):
    s =get_session(proxies)
    try:
       print("Request page with IP:", s.get("http://icanhazip.com", timeout=1.5).text.strip())
    except Exception as e:
        continue

次のような出力が得られる。

プロキシはなぜウェブスクレイピングに重要なのか?

企業はウェブ・スクレイピングによって貴重なデータを抽出し、データ駆動型の意思決定を行い、データ駆動型のサービスを提供することができる。ウェブスクレイピングにおいてプロキシが重要なのは、以下の理由による。

  • プロキシを使えば、特定の地域からリクエストを行い、ウェブサイトがその場所に表示する特定のコンテンツを見ることができる。プロキシのこの機能は、オンライン小売業者から商品データをスクレイピングする際に有益です。
  • プロキシを使えば、ブロックされたり禁止されたりすることなく、対象のウェブサイトに大量のリクエストを行うことができる。
  • プロキシを使えば、ウェブサイトからデータをより確実かつ効率的にクロールできる。
  • プロキシを使えば、禁止される心配なしに、同じウェブサイトや異なるウェブサイトへの同時セッションを無制限に行うことができる。
  • プロキシは、ターゲットとなるウェブサイトからあなたのマシンのIPアドレスを隠すため、あなたのデバイスにさらなるセキュリティを提供する。
  • 企業はプロキシを使って競合他社の価格や製品の特徴をモニターし、自社のサービスや製品を改善する。

ウェブスクレイピングのためのPythonチュートリアルの結論

これまで、ウェブスクレイピングは自動化された方法でウェブサイトからデータを抽出するのに役立つと説明してきた。あなたはデータを.csvファイルのような使用可能な形式に変換することができます。ビジネスでは、競合他社の価格や製品の特徴をチェックするためにウェブスクレイピングを使用する。Webスクレイピングは、プロキシを使用すると、ターゲットのWebサイトから元のIPアドレスを隠すことで身元を匿名に保つことができるため、非常に便利です。プロキシを使えば、ブロックされたり禁止されたりする心配なく、ウェブサイトに複数のリクエストを送ることができる。