【初心者向け】Webスクレイピングのやり方を徹底解説
エンジニアになろう!
WEB上からデータを取得したい!
クローリングについて
クローリングは、複数のWebサイトのリンクを参考に、Webページを巡回する技術です。
クローリングをするプログラムをクローラーとも呼びます。
クローリングが活用されている有名な例は、Google検索。
非常に高度なアルゴリズムにより、様々な検索結果を表示しています。
Webスクレイピングについて
Webスクレイピングは、HTMLから自分が欲しいと思うデータを取得すること。
これを行うプログラムをスクレイパとも呼びます。
Web上のデータを取得する上では、欠かせない技術となっています。
クローラにより、自分が欲しいと思うデータのあるWebサイトにアクセスし、スクレイパによって情報を取得していくという流れです。
スクレイピングをする前に
スクレイピングは、HTMLとCSSを知っておかなければ、何もできません。
そのため、自信のない人は「Progate」などで復習、または学習しましょう。
また、Selenium(セレニウム)を使ってのスクレイピングやDOM解析には、JavaScriptの知識が必要になる事がよくあります。
JavaScriptについてよく知っておくのも、スクレイピングに役立ちます。
スクレイピングを行う際の注意点
スクレイピングは、禁止しているサイトではやらないようにしましょう。
また、サイトに過度にアクセスをすると、法に反することもあります。
実際に、過度なスクレイピングにより逮捕されているケースもあります。
最悪の事態にならないよう、スクレイピングを禁止していないかを確認したり、過度なアクセスをするプログラムではないかを確認しましょう。
スクレイピングのオススメの言語
スクレイピングをするのに使用する言語は、にゃんこ師匠的にはPythonをおすすめします。
なぜなら、Pythonはスクレイピング関連のライブラリが豊富だからです。
ただ、Webアプリケーションに使用している言語によっても、使用すべき言語が変わります。
(PHPで作られているのなら、PHPでスクレイピングをするということです。)
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()
初心者にオススメの本
さいごに
RequestsとBeautifulSoupを使えば、簡単にWebサイトのデータを集めることができます。
ログインが必要であるときなど、BeautifulSoup でデータを解析出来ない場合は、Selenium を使いましょう。
このように、用途や状況によって BeautifulSoup と Selenium を使えば、なお一層スクレイピングがはかどりますね!
こちらの記事もオススメ!
2020.07.30Python 特集実装編※最新記事順Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみた!P...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
さいごの一言
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪、名古屋の4拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit
おすすめ記事
immichを知ってほしい
2024.10.31