今回はPythonを使ったウェブスクレイピングの方法を紹介します
スクレイピングにもいろんなやり方があるかと思いますが、今回は初心者でもできるように一番簡単な方法を選びました
それはseleniumを使用してWEBページにアクセスする方法です
seleniumについては、この後サンプルプログラムを交えて説明していきます
ウェブスクレイピングとは
まずは、ウェブスクレイピングについてです
ウェブスクレイピングとはWEBページの情報を取得する技術のことです
これを自分のアプリに組み込むことにより、自動的にウェブ上のデータ集めることもが可能となりますので以下のようなアプリが作れます
例えば
- 株価情報を定期的に収集してAIに学習させる
- 登録されたキーワードについて検索して結果をファイルに一括で出力する
- フリマサイトを定期的に巡回して出品があったら通知する
seleniumu
seleniumuとはWebアプリケーション用のテストツールです
Webアプリの画面(GUI)の試験のためにWebブラウザの操作を自動化することができます
元々はWebブラウザの自動化が目的のパッケージですが、Webページに自動でアクセスして、そのページの情報をとってこれるので、これをスクレイピングに活用します
インストール
まずは必要なパッケージをインストールします
selenium:WEBブラウザを自動操作用
chromedriver_binary:クローム操作用 自分のクロームのバージョンに合わせてください
BeautifulSoup:取得したHTMLの解析用
$ pip install selenium
$ pip install chromedriver-binary==75.0.3770.8.0
$ pip install BeautifulSoup
サンプルコード
サンプルコードです
# coding: utf-8
from bs4 import BeautifulSoup
import chromedriver_binary
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def webScraping():
# ブラウザのオプションを格納する変数をもらってきます。
options = Options()
# Headlessモードを有効にする(コメントアウトするとブラウザが実際に立ち上がります)
# options.set_headless(True)
# ブラウザを起動する
driver = webdriver.Chrome(chrome_options=options)
# ブラウザでアクセスする
driver.get("https://sho10case.com/programingschol-1-6-browser-2/")
# HTMLを文字コードをUTF-8に変換してから取得します。
html = driver.page_source.encode('utf-8')
# BeautifulSoupで扱えるようにパースします
soup = BeautifulSoup(html, "html.parser")
#
data = soup.select_one('#post-513 > div > div > div > ol')
print(data.text)
inp=input('終了')
pass
def main():
# while True:
print('----------------------------------------------------')
print('------------------------開始------------------------')
webScraping()
pass
if __name__ == "__main__":
main()
使用方法
まずはスクレイピングしたいサイトにクロームでアクセスしてください
アクセスしたら取得したい情報付近で右クリックして検証を選択してください
すると右側に見慣れないものが表示されるとおもいます
これがこのページの構成を表しています
この部分にマウスを持っていくと、ページの対応した部分が強調表示されます
自分が取得したい部分が強調表示されたら、そこで右クリックしてCopy→Copy selectorを選択してください
ここからはソースの修正です
まずはソース中にアクセスするページのURLがあるので、自分のお目当てのページのURLを入れてください
# ブラウザでアクセスする
driver.get("https://sho10case.com/programingschol-1-6-browser-2/")
次にセレクターの部分を先ほどコピーした値に変更します
data = soup.select_one('#post-513 > div > div > div > ol')
これでソースの修正は完了です
実行してみましょう
クロームが立ち上がり、指定したURLのページが表示されます
指定した部分のデータ(ここでは目次の内容)が表示されています
まとめ
今日はWebページのスクレイピングでした
Seleniumを使用すればこんなに簡単にデータが取得できます
サンプルのコードからたった2行修正すれば、自分の好きなページの情報がとってこれるので皆さんも試してみてください