Python+Docker+Selenium+Chromeでウェブスクレイピングをする part3
Docker+Selenium+Chromeで甘茶の音楽工房ウェブスクレイピングします.本稿では,前回のまでの工程をdef文を用いて定義します.
作業用BGMとして甘茶の音楽工房 (opens new window)の音楽をダウンロードして聞いていました.いい加減面倒臭くなってきたので,ウェブスクレイピングでダウンロードしていきます.
全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】
# スクリプト
# モジュール
# coding: UTF-8
import os
import requests
import urllib.request
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selene.driver import SeleneDriver
from webdriver_manager.utils import chrome_version
from webdriver_manager.chrome import ChromeDriverManager
# selenium.webdriverの起動(docker)
# docker上でselenium.webdriverの起動
def webdriver_start():
# Chrome のオプションを設定する
options = webdriver.ChromeOptions()
# Selenium Server に接続する
driver = webdriver.Remote(
command_executor='http://localhost:4444/wd/hub',
options=options,
)
return driver
# selenium.webdriverの起動(ローカル)
# ローカル上でselenium.webdriverの起動
def webdriver_local_start():
# versionに応じたchrome driver のインストール
version = chrome_version()
url = 'http://chromedriver.storage.googleapis.com/LATEST_RELEASE_' + version
response = requests.get(url)
options = Options()
options.add_argument('--headless')
# インストールしたchrome driverでchromeを起動
driver = SeleneDriver.wrap(webdriver.Chrome(
executable_path=ChromeDriverManager().install(),
chrome_options=options))
return driver
# webドライバーで甘茶の音楽工房の音楽をダウンロード
イメージ音楽のページから,2ページ目,3ページ目のURLを取得します.
# webドライバーで甘茶の音楽工房の音楽をダウンロード
def amacha_page_DL(driver):
# 出力ディレクトリ作成
os.makedirs('bgm', exist_ok=True)
# WebElementから各mp3のダウンロード先URLを取得
elements = driver.find_elements_by_class_name("download")
for element in elements:
#print(element.get_attribute('innerHTML')) # WebElementからhtmlを取得
# mp3の詳細ページのURL,tagで取得
aTag = element.find_element_by_tag_name("a")
# mp3のダウンロードページのURL
dlurl = aTag.get_attribute('href').replace('music_', 'mp3/').replace('.html', '.mp3')
dlfile = 'bgm/' + dlurl.split('/')[-1]
urllib.request.urlretrieve(dlurl, dlfile) #ダウンロード実行:要はリンク先をダウンロード
return driver.current_url
# webドライバーで甘茶の音楽工房のイメージ音楽ごとのページ情報を取得
# webドライバーで甘茶の音楽工房のイメージ音楽ごとのページ情報を取得
def amacha_page_tags(driver):
# WebElementから次ページのURLを取得
# classで指定(1つ:find_element_by_class_name:element!!)
element = driver.find_element_by_class_name("pager")
# 次ページのURL,tagで取得
aPageTags = element.find_elements_by_tag_name("a")
return aPageTags
# 甘茶の音楽工房の全ページ中の音楽をダウンロード
# 甘茶の音楽工房の全ページ中の音楽をダウンロード
def amacha_DL(image_url):
# 甘茶の音楽工房にアクセス
driver = webdriver_start()
driver.get(image_url)
# イメージ音楽の最初のページをダウンロード
print(amacha_page_DL(driver))
# 2ページ目,3ページ目のURLを示すtagを取得
aPageTags = amacha_page_tags(driver)
# tagから2ページ目,3ページ目のURLを取得
for aPageTag in aPageTags:
# tagからhref要素を取得
page_url = aPageTag.get_attribute('href')
# 次ページのURLにアクセス
next_driver = webdriver_start()
next_driver.get(page_url)
# ダウンロード
print(amacha_page_DL(next_driver))
# 甘茶の音楽工房のダウンロード実行
image_music_url = ['https://amachamusic.chagasi.com/image_kurai.html']
amacha_DL(image_music_url)
# まとめ
甘茶の音楽工房 (opens new window)の音楽のダウンロードを実装しました.別シリーズでダウンロードしたmp3を乱数で任意の再生時間で結合してみようと思います.
# 参考サイト
10分で理解する Selenium (opens new window)
Python + Selenium + ChromeでChromeバージョンに合ったChromeDriverを自動インストールする方法 (opens new window)
Dockerコンテナからseleniumを使ってスクレイピング (opens new window)
Python×SeleniumでWebスクレイピング実践 (opens new window)
Selenium webdriverよく使う操作メソッドまとめ (opens new window)
Docker上でSeleniumとHeadless ChromeとPython3を動かす (opens new window)
【Python】seleniumでWebElementからhtmlを取得する (opens new window)
Python + Selenium + Chrome でファイル保存まわり (opens new window)