4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pythonを使った初心者のためのスクレイピング

Last updated at Posted at 2022-12-22

はじめに

バックエンドに興味が出ない自分だが、どうしても今後のためにバックエンドの勉強をしなければいけない。。。
ということで、まずは興味あることをバックエンドで使いそうな言語でやってみようという単純な考えに行き着いた自分は、とりあえずpythonを触ってみるのであった。
今回は副業でも利があるスクレイピングをやってみる。

実行環境

・MacBook Air (M1, 2020)
・macOS Monterey
・Python 3.10.8
・ChromeDriver(https://chromedriver.chromium.org/downloads)
・Selenium

条件

実際の簡単な案件を想定して下記のような条件で引っ張ってくる

YouTubeの音楽部門の急上昇上位5件の動画タイトルを取得

まずはrobots.txtでwebスクレイピングできるかどうかを調べる
image.png
ここに載っているものは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に格納するところまでやろうかと思います。。。できたらまた記事を書きます

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?