KOTA ITO

Generation

generate functionMon, 06 Feb 2023

# URL用のカントリーコードをリストとして取り出す。 import pandas as pd df_cc = pd.read_csv('220919_country_code.csv') # 2 charactersの列のみリスト化する import itertools country_list = df_cc['2 characters'].values.tolist() list(itertools.chain.from_iterable(country_list)) # print(country_list) # 存在しない国名をリストから削除する。 remove_list = ['af', 'ax', 'al', 'dz', 'as', 'ad', 'ao', 'ai', 'aq', 'ag', 'am', 'aw', 'az', 'bs', 'bh', 'bd', 'bb', 'bz', 'bj', 'bm', 'bt', 'bq', 'ba', 'bw', 'bv', 'io', 'bn', 'bf', 'bi', 'kh', 'cm', 'cv', 'ky', 'cf', 'td', 'cn', 'cx', 'cc', 'km', 'cg', 'cd', 'ck', 'ci', 'hr', 'cu', 'cw', 'cy', 'dj', 'dm', 'gq', 'er', 'et', 'fk', 'fo', 'fj', 'gf', 'pf', 'tf', 'ga', 'gm', 'ge', 'gh', 'gi', 'gl', 'gd', 'gp', 'gu', 'gg', 'gn', 'gw', 'gy', 'ht', 'hm', 'va', 'ir', 'iq', 'im', 'jm', 'je', 'jo', 'ke', 'ki', 'kp', 'kw', 'kg', 'la', 'lb', 'ls', 'lr', 'ly', 'li', 'mo', 'mk', 'mg', 'mw', 'mv', 'ml', 'mt', 'mh', 'mq', 'mr', 'mu', 'yt', 'fm', 'md', 'mc', 'mn', 'me', 'ms', 'mz', 'mm', 'na', 'nr', 'np', 'nc', 'ne', 'nu', 'nf', 'mp', 'om', 'pw', 'ps', 'pg', 'pn', 'pr', 'qa', 're', 'ru', 'rw', 'bl', 'sh', 'kn', 'lc', 'mf', 'pm', 'vc', 'ws', 'sm', 'st', 'sn', 'rs', 'sc', 'sl', 'sx', 'si', 'sb', 'so', 'gs', 'ss', 'lk', 'sd', 'sr', 'sj', 'sz', 'sy', 'tj', 'tz', 'tl', 'tg', 'tk', 'to', 'tt', 'tn', 'tm', 'tc', 'tv', 'ug', 'um', 'uz', 'vu', 'vg', 'vi', 'wf', 'eh', 'ye', 'zm', 'zw'] country_list = [x for x in country_list if x not in remove_list] # print(country_list) # 取得したいチャートの日付を指定する d = '2022-11-17' # forループでURLリストを作成する urllist = [] for cc in country_list: urllist.append(f'https://charts.spotify.com/charts/view/regional-{cc}-weekly/{d}') # !pip install PySimpleGUI import chromedriver_binary from selenium import webdriver import time # ChromeのWebDriverを使用する driver = webdriver.Chrome() from selenium import webdriver #from selenium.webdriver.firefox.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options from selenium.common.exceptions import NoSuchElementException from bs4 import BeautifulSoup import pandas as pd import time import re import csv import PySimpleGUI as sg from webdriver_manager.chrome import ChromeDriverManager # def setup_class(cls): # cls.driver = webdriver.Chrome(ChromeDriverManager().install()) # download = f'/Users/hdymacuser/Documents/データ分析/2302_Spotify_Kaggle/spotify_chart_country_weekly' # options = webdriver.ChromeOptions() # options.add_experimental_option("prefs", {"download.default_directory": download }) # 乱数を発生させる from random import randint from time import sleep #Seleniumを使うための設定とSpotifyの画面への遷移 options = Options() options.add_argument('--headless') #options = webdriver.ChromeOptions() options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--start-fullscreen') options.add_argument('--disable-plugins') options.add_argument('--disable-extensions') options = webdriver.ChromeOptions() download = '/Users/hdymacuser/Documents/データ分析/2302_Spotify_Kaggle/spotify_chart_country_weekly' options.add_experimental_option("prefs", {"download.default_directory": download }) INTERVAL = 1.5 driver = webdriver.Chrome(options=options) driver.maximize_window() time.sleep(INTERVAL) # Spotifyにログインする from time import sleep # Initialize the Chrome webdriver # driver = webdriver.Chrome(driver_path, options=options) options.add_argument('--headless') driver = webdriver.Chrome(options=options) error_flg = False # ログインページを開く target_url = 'https://accounts.spotify.com/ja/login?continue=https%3A%2F%2Fcharts.spotify.com/login' driver.get(target_url) sleep(randint(2, 3)) driver.set_window_size(1920, 1080) driver.save_screenshot('screenshot_login.png') driver.find_element(By.ID, 'login-username').send_keys('islifeshort@hotmail.com') #USERNAME #password driver.find_element(By.ID, 'login-password').send_keys('#Atok1010') #PASSWORD driver.find_element(By.ID, 'login-button').click() sleep(randint(2, 3)) # ここのスリープがないとDLするページでエラーが起きるみたい driver.save_screenshot('screenshot_afterlogin.png') from selenium.webdriver.common.keys import Keys # forループで各URLのファイルをダウンロードしていく for u in urllist: driver.get(u) driver.set_window_size(1920, 1080) sleep(randint(4,7)) if u == 'https://charts.spotify.com/charts/view/regional-au-daily/2023-01-14': driver.save_screenshot('screenshot_dl_au.png') else: driver.save_screenshot('screenshot_dl.png') try: element = driver.find_element(By.XPATH, '//*[@id="__next"]/div/div/main/div[2]/div[3]/div/div/a/button') driver.execute_script('arguments[0].click();', element) time.sleep(INTERVAL) except Exception: error_flg = True print(f'{u}でダウンロードダウンロードボタン押下時にエラーが発生しました。') import pandas as pd import os import glob # ディレクトリ変更 os.chdir('/Users/hdymacuser/Documents/データ分析/2302_Spotify_Kaggle/spotify_chart_country_weekly') df = pd.DataFrame(columns = []) for i in glob.glob(f"regional*{d}.csv"): # ここの日付を最新に修正すること! tmp = pd.read_csv(i) tmp['day'] = i df = pd.concat([df, tmp] ) print(df) # day列に入っているファイル名から日付を取り出す df2 = df['day'].str.extract(r'weekly-(.+).csv', expand=True) df2.rename(columns={0: 'yymmdd'}, inplace=True) print(df2) # day列に入っているファイル名から国名を取り出す df2_2 = df['day'].str.extract(r'regional-(.+)-weekly', expand=True) df2_2.rename(columns={0: 'country_code'}, inplace=True) print(df2_2) df3 = pd.concat([df, df2, df2_2], axis=1) print(df3) df4 = pd.merge(df3, df_cc, left_on='country_code', right_on='2 characters', how='left') print(df4) # 今日の日付を取得する import datetime t_delta = datetime.timedelta(hours=9) JST = datetime.timezone(t_delta, 'JST') now = datetime.datetime.now(JST) today = f'{now:%y-%m-%d}' today=str(today).replace('-','') df4.to_csv(f"/Users/hdymacuser/Documents/データ分析/2302_Spotify_Kaggle/merged_csv/{today}_SpotifyChart_weekly_{d}.csv", index=False, encoding='utf_8_sig')

# FOR LOOP for c in df_cc['2 characters']: # 取得したいチャートの日付を指定する d = '2022-11-17' # URLの作成 url = f'https://charts.spotify.com/charts/view/regional-{c}-weekly/{d}' print(url) # Seleniumを使うための設定とSpotifyの画面への遷移 options = Options() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--start-fullscreen') options.add_argument('--disable-plugins') options.add_argument('--disable-extensions') # Initialize the Chrome webdriver driver =

Questions about programming?Chat with your personal AI assistant