• トップ
  • ブログ一覧
  • 【初心者向け】Webスクレイピングのやり方を徹底解説
  • 【初心者向け】Webスクレイピングのやり方を徹底解説

    メディアチームメディアチーム
    2019.10.03

    エンジニアになろう!

    WEB上からデータを取得したい!

    ミツオカミツオカ
    WEB上から自分が欲しいデータを勝手に取得できたらいいのになあ〜
    にゃんこ師匠 にゃんこ師匠
    「Webスクレイピング」という技術でできるぞー!活用すれば、いろんなデータを集めて使うことで、業務の効率化、生産性を高めることができるな!
    ミツオカミツオカ
    面倒な作業を自動化するのも夢じゃないですね!ぜひマスターしたいです!
    にゃんこ師匠 にゃんこ師匠
    じゃあ、Webスクレイピングの詳細とオススメの言語などについて紹介しようかの!ちなみに、なぜスクレイピングがしたいんじゃ?
    ミツオカミツオカ
    トランプ大統領とウクライナ政府の動向をいち早くチェックしたいんです…!
    にゃんこ師匠 にゃんこ師匠
    ・・・キャラ変えたんか?

    クローリングについて

    クローリングは、複数のWebサイトのリンクを参考に、Webページを巡回する技術です。

    クローリングをするプログラムをクローラーとも呼びます。

    クローリングが活用されている有名な例は、Google検索

    非常に高度なアルゴリズムにより、様々な検索結果を表示しています。

    にゃんこ師匠 にゃんこ師匠
    クローリングは、スクレイピングと一緒によく出てくる言葉なので、最低限理解しておくといいじゃろう!

    Webスクレイピングについて

    Webスクレイピングは、HTMLから自分が欲しいと思うデータを取得すること。

    これを行うプログラムをスクレイパとも呼びます。

    Web上のデータを取得する上では、欠かせない技術となっています。

    クローラにより、自分が欲しいと思うデータのあるWebサイトにアクセスし、スクレイパによって情報を取得していくという流れです。

    スクレイピングをする前に

    スクレイピングは、HTMLCSSを知っておかなければ、何もできません。

    そのため、自信のない人は「Progate」などで復習、または学習しましょう。

    また、Selenium(セレニウム)を使ってのスクレイピングDOM解析には、JavaScriptの知識が必要になる事がよくあります。

    JavaScriptについてよく知っておくのも、スクレイピングに役立ちます。

    スクレイピングを行う際の注意点

    スクレイピングは、禁止しているサイトではやらないようにしましょう。

    また、サイトに過度にアクセスをすると、法に反することもあります。

    実際に、過度なスクレイピングにより逮捕されているケースもあります。

    最悪の事態にならないよう、スクレイピングを禁止していないかを確認したり、過度なアクセスをするプログラムではないかを確認しましょう。

    スクレイピングのオススメの言語

    スクレイピングをするのに使用する言語は、にゃんこ師匠的にはPythonをおすすめします。

    なぜなら、Pythonはスクレイピング関連のライブラリが豊富だからです。

    ただ、Webアプリケーションに使用している言語によっても、使用すべき言語が変わります。

    (PHPで作られているのなら、PHPでスクレイピングをするということです。)

    にゃんこ師匠 にゃんこ師匠
    書籍やサイトでもPythonによるスクレイピングの情報が豊富じゃな!
    ミツオカミツオカ
    それだと、障害やエラーが発生した時でも、他言語よりも容易に対処できますね

    Requestsでのスクレイピングのやり方

    それでは、スクレイピングのやり方について見ていきましょう。

    今回は、Pythonを使う前提でお話していきます。

    Requestsで、Webページを取得する

    「Requests」は、PythonのライブラリでHTTPの通信を行うことができます。

    人間のためのHTPPと言われるほど高度で使いやすいライブラリです。

    Requestsを使うためには、pipでライブラリをインストールする必要があります。

    当たり前ですが、pip や Python の環境がない方は、先にそちらを準備する必要があります。

    Requestsをインストール

    以下のコードで、ライブラリをインストールできます。

    1pip install requests

    pip3をインストールされている方は、pipの箇所をpip3とコマンドを打つ必要があります。

    pipに問題がなければ、難なくインストールできるはずです。

    Requestsの基本的な使い方

    では、実際に、Requestsでページを取得してみましょう!

    今回は、人気WebメディアであるGigazineのページを取得してみました。

    1import requests
    2
    3url = "https:gigazine.net/"
    4
    5info = requests.get(url)
    6
    7print(info.headers)
    8
    9print(info.content)

    get()関数でurlを指定すれば、そのページの情報を取得できます。

    ちなみに出力しているものは、ヘッダー情報とbody以下のコンテンツです。

    headersで「header情報」を、contentで「body以下のコンテンツ」を取得できます。

    BeautifulSoupで、データを取得する

    Requestsでwebページを取得したら、ページの解析をする必要があります。

    その時に用いるのが、BeautifulSoup

    インストール

    それでは、まず、BeautifulSoupをインストールしましょう。

    1pip install beautifulsoup4

    Requestsと併用してBeautiful Soupを使う

    「Requests」と「Beautiful Soup」は、よく併用して使われます。

    では、実際に、Requests と Beautiful Soup を使って、Gigazineのデータを取得してみたいと思います。

    1import requests
    2from bs4 import BeautifulSoup
    3
    4response = requests.get("https://gigazine.net/")
    5
    6data = BeautifulSoup(response.content,"html.parser")
    7
    8#gigazineの記事一覧を出力
    9print(data.find("section"))

    まず、Requests によりGigazineのページを取得し、BeautifulSoup によってhtmlファイルを解読していきます。

    そして最後に、sectionタグを見つける処理を行い、出力しています。

    ブラウザを操作しながら、スクレイピング!?

    Requests と BeautifulSoup では、ログインが必要なサイトやDOM解析に時間がかかるサイトでは、スクレイピングが困難です。

    その際には、Selenium がおすすめです。

    ブラウザ操作でスクレイピングをするため、ログインが必要なサイトでも簡単にデータを取得できます。

    また、ボタンをクリックしないと出てこないデータ等がある場合、仮想ブラウザでクリックイベントを発することで、クリックした後のデータを取得できます。

    Requests では、Bot判定される確率が高く、セキュリティ面が強固なサイトでは出来ないケースが多々あります。

    ですが、Selenium は仮想ブラウザを操作し、データを取得していくため、Bot判定にかかりにくいのです。

    にゃんこ師匠 にゃんこ師匠
    しかし、短所もある…。ブラウザを立ち上げるため、結構重かったりするのじゃ
    ミツオカミツオカ
    高速にデータを集めたい場合は不向きかもー!

    Webブラウザを立ち上げた後、Google検索で、Webスクレイピングという文字で検索をします。

    注意すべき点は、処理を大量に詰め込むとサーバーに負担がかかります。

    処理が多いプログラムではtime.sleep() を使うことで、時間を空けながら行うプログラムにするのが良いでしょう。

    1from selenium import webdriver
    2
    3driver = webdriver.Chrome()
    4
    5driver.get("https://www.google.com/")
    6
    7search = driver.find_element_by_name("q")
    8
    9search.send_keys("Webスクレイピング")
    10
    11search.submit()
    12
    13driver.quit()

    初心者にオススメの本

    Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる!
    Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる!

     

    さいごに

    RequestsとBeautifulSoupを使えば、簡単にWebサイトのデータを集めることができます。

    ログインが必要であるときなど、BeautifulSoup でデータを解析出来ない場合は、Selenium を使いましょう。

    このように、用途や状況によって BeautifulSoup と Selenium を使えば、なお一層スクレイピングがはかどりますね!

    こちらの記事もオススメ!

    featureImg2020.07.30Python 特集実装編※最新記事順Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみた!P...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    さいごの一言

    にゃんこ師匠 にゃんこ師匠
    これから機械学習やAIが発展していく中で必須になってくるスキルとも言えるのお!
    ミツオカミツオカ
    それはぜひ身に着けていきたいですね!

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background