はじめに
バックエンドに興味が出ない自分だが、どうしても今後のためにバックエンドの勉強をしなければいけない。。。
ということで、まずは興味あることをバックエンドで使いそうな言語でやってみようという単純な考えに行き着いた自分は、とりあえずpythonを触ってみるのであった。
今回は副業でも利があるスクレイピングをやってみる。
実行環境
・MacBook Air (M1, 2020)
・macOS Monterey
・Python 3.10.8
・ChromeDriver(https://chromedriver.chromium.org/downloads)
・Selenium
条件
実際の簡単な案件を想定して下記のような条件で引っ張ってくる
YouTubeの音楽部門の急上昇上位5件の動画タイトルを取得
まずはrobots.txtでwebスクレイピングできるかどうかを調べる
ここに載っているものはURLのアクセスが許可されていないものなのでwebスクレイピングできない(知らなかった。。)
今回の対象は急上昇 /trend
なので問題なし!
事前準備(Selenium, ChromeDriver)
URLにアクセスするためSelenium
を使用します。
Selenium はざっくりいうと Web ブラウザの操作を自動化するためのフレームワークです。
まずは以下のパイプコマンドでSeleniumをインストール
pip install selenium
次にwebドライバのインストールです。今回はChromeを使用するためChromeDriverをインストールします
pip install chromedriver-binary==<Chromeバージョン番号>
参考
スクレイピング
では実際にコードを書いていきましょう!
from selenium import webdriver
# リクエストURL
YOUTUBE_URL_HOST = "https://www.youtube.com/"
REQ_URL = YOUTUBE_URL_HOST + 'feed/trending'
# ChromeDriverの格納場所
CHROME_DRIVER_PATH = '<ChromeDriverの格納場所>'
if __name__ == "__main__":
# ChromeDriverでurlを起動
driver = webdriver.Chrome(CHROME_DRIVER_PATH)
driver.get(REQ_URL)
こちらでまずREQ_URL
にアクセスできるので、実行するとChromeが起動してyoutubeの急上昇を開くところまでできます。
次にここからWebブラウザを操作して音楽タブをタップします。
タップの操作をするには以下
# 急上昇の音楽タブをタップ
xpath = '<youtubeの音楽タブのXPath>'
driver.find_element_by_xpath(xpath).click()
音楽タブのXPathを指定してfind_element_by_xpath().click()
XPathの取得方法は下記を参照
スクレイピングしたいwebブラウザまでくることができたらあとは欲しい情報のclassやIdなどを指定して取得するだけです。
今回は動画タイトルが取得対象なのでid = 'video-title'
のtextを取得すれば良い(取得したい内容がどこの何に該当するかはwebページの検証で見てみてください)
id指定してListで取得するには以下の書き方でOK
# 'video-title'の要素を全て取得
video_ranking_list = driver.find_elements_by_id('video-title')
このListのうち上位5件の動画タイトル(.text要素)を取得すればいいだけなので、今回は試しにprintで表示してみましょう。
for video_data in video_ranking_list:
title = video_data.text
print(title)
num = num + 1
if(num == 5):
break
ということで実行すればyoutube動画の急上昇(音楽)の上位5件の動画タイトルがコンソールに表示されるかと思います!
まとめ
今回は超簡単にスクレイピングがお試しできる方法を紹介しました。
これによってバックエンドをやる気になったかというとそうでもないけど。。。
次回はSQLiteを使ってTBLに格納するところまでやろうかと思います。。。できたらまた記事を書きます