Skip to content

Instantly share code, notes, and snippets.

@8q
Last active November 9, 2019 13:55
Show Gist options
  • Save 8q/15e057c712775071daa262718a99e5a1 to your computer and use it in GitHub Desktop.
Save 8q/15e057c712775071daa262718a99e5a1 to your computer and use it in GitHub Desktop.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
import chromedriver_binary
import os
import time
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 60)
def driver_get(url):
"""
URLに移動して全要素が得られるまで待機する処理
"""
driver.get(url)
wait.until(EC.presence_of_all_elements_located)
driver_get("https://chunithm-net.com/mobile/")
driver.find_element_by_name('segaId').send_keys('ユーザ名')
driver.find_element_by_name('password').send_keys('パスワード')
driver.find_element_by_class_name('btn_login').click()
wait.until(EC.presence_of_all_elements_located)
driver.find_element_by_class_name("btn_select_aime").click()
wait.until(EC.presence_of_all_elements_located)
driver_get("https://chunithm-net.com/mobile/record/musicGenre")
driver.find_element_by_class_name("btn_master").click()
wait.until(EC.presence_of_all_elements_located)
csv_file = open('result-highscore.csv', 'w')
csv_file.write('title,score,playcount\n')
count = 1
while True:
try:
music_form_element = driver.find_element_by_xpath(
f"(//div/form[@action='https://chunithm-net.com/mobile/record/musicGenre/sendMusicDetail/'])[{count}]")
music_title = music_form_element.find_element_by_class_name(
"music_title").text
playcount = 0
highscore = 0
highscore_elements = music_form_element.find_elements_by_class_name(
"text_b")
if len(highscore_elements) > 0:
highscore_element, *_ = highscore_elements
highscore = int(highscore_element.text.replace(",", ""))
music_form_element.click()
wait.until(EC.presence_of_all_elements_located)
*_, playcount_element = driver.find_elements_by_css_selector(
".text_n + span")
playcount = int(playcount_element.text)
driver.find_element_by_class_name("btn_back").click()
wait.until(EC.presence_of_all_elements_located)
print((music_title, highscore, playcount))
csv_file.write(f'"{music_title}",{highscore},{playcount}\n')
count += 1
time.sleep(4) # あまり速いと目をつけられそうなので
except NoSuchElementException:
break
csv_file.close()
driver.quit()
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import chromedriver_binary
import os
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 60)
def driver_get(url):
"""
URLに移動して全要素が得られるまで待機する処理
"""
driver.get(url)
wait.until(EC.presence_of_all_elements_located)
driver_get("https://chuniviewer.net/login")
driver.find_element_by_name('username').send_keys('username')
driver.find_element_by_name('password').send_keys('password')
driver.find_element_by_name('action').click()
wait.until(EC.presence_of_all_elements_located)
csv_file = open('result.csv', 'w')
csv_file.write('id,username,rate,max\n')
try:
for page in range(1, 249):
driver_get(f"https://chuniviewer.net/userlist?page={page}")
user_list_table = driver.find_element_by_id('user-list-table')
trs = user_list_table.find_element_by_tag_name(
'tbody').find_elements_by_tag_name('tr')
for tr in trs:
tds = tr.find_elements_by_tag_name('td')
ls = []
ls.append(tds[0].text)
ls.append(tds[1].find_element_by_tag_name('a').text)
ls.append(tds[2].find_element_by_tag_name('a').text)
ls.append(tds[3].text)
csv_file.write(','.join(ls) + '\n')
finally:
csv_file.close()
driver.quit()
library(ggplot2)
library(magrittr)
df <- read.csv('result.csv')
data <- df[df$max >= 15.00,]$max %>% aggregate(., by=list(.), length)
data$x <- cumsum(data$x)
data$x <- data$x - data[data$Group.1 == 15.00,]$x
g <- ggplot(data, aes(x=Group.1, y=x)) +
geom_line(color="red") +
geom_point(data = data.frame(x = c(15.36), y = data[data$Group.1 == 15.36,]$x), aes(x, y), size=2.5) +
labs(title='chuniviewer登録者のレーティング-達成者数グラフ', x="レーティング", y="達成者数")
plot(g)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment