본문 바로가기
DB 공부하기

230217_DB복습

by 보랏 2023. 2. 17.

안녕하세요. 보랏입니다.

 

오늘은 4일동안 python 진도를 많이 나갔기 때문에 복습하는 시간 및

배운걸 활용하여 응용하는 시간을 가졌습니다.

 

저는 그래서 제가 구글링으로 검색하여 만들었던 던담 크롤링 소스를 가져가서 

강사님께 문의드리고 다시 조정하였습니다.

 

그래서 이제 던담 페이지당 캐릭터별 아이템을 테이블로 만드는것까지 가능해졌습니다.

(혼자서는 정말 힘들었는데... 막상 이렇게 간단하게 하니 신기했네요....)

 

던담 python크롤링 소스를 공유드릴테니 

궁금해하시는 분들이 있으시면 한 번 해보시면 좋을 것 같습니다. 

 

1. 캐릭터별 링크 변경 Source

  • 던담은 get방식의 커뮤니티 사이트이기 때문에 던담주소가 유지되면서 뒤쪽 링크가 계속 변하게 됩니다. 캐릭터별 링크를 얻기위한 Source입니다. 
from bs4 import BeautifulSoup as BS
import csv
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome() 

# 캐릭터별 링크 변경Source
url = "https://dundam.xyz/damage_ranking?page=1&type=7&job=%E7%9C%9E%20%EC%9B%A8%ED%8E%80%EB%A7%88%EC%8A%A4%ED%84%B0&baseJob=%EA%B7%80%EA%B2%80%EC%82%AC(%EB%82%A8)&weaponType=%EC%A0%84%EC%B2%B4&weaponDetail=%EC%A0%84%EC%B2%B4&banList="
driver.get(url)
ranking_bs = BS(driver.page_source)
time.sleep(2)

link = [x['link'] for x in ranking_bs.findAll("div", class_='rkt-tr form')[:-1]]
link

 

2. 캐릭터 장착장비 확인 Source

  • 캐릭터 장착장비는 예전에 독학할 때 만든 소스가 있어서 결과는 똑같았지만 이번에 학원에서 배운 문법이나 전처리 방법을 통해 좀 더 깔끔하게 다듬었습니다. 
  • 그리고 해당 리스트를 pandas테이블로 만들었는데 지금 '무기'쪽이 한 칸씩 밀려야되는데 이 부분은 추후 다시 조정하도록 하겠습니다. 
# 장착장비 Source
char_weapon = "https://dundam.xyz/view?name=%EB%B3%B4%EB%9E%8F%EB%8B%AC&server=cain&image=bc2df3649e63a020a23152d1d1f04598&serverT="
time.sleep(2)
driver.get(char_weapon)
weapon_bs = BS(driver.page_source)

driver.find_element(By.XPATH, '//*[@id="character"]/div[2]/div[3]/div/label[1]').click()

a_list = []
a = driver.find_elements(By.CLASS_NAME, 'tr')
for i in a :
    a_list.append(i.text.split('\n'))
    
a_list[:13] 뒤쪽에 필요없는 빈 문자열이 있어 인덱싱을 걸었습니다


# pandas 테이블
df = pd.DataFrame(data=a_list, columns=['종류', '장비명', '마법부여', '합성1', '옵션레벨', '종합', '강화 및 증폭', '옵션2'])
df

 

3. 던담 페이지 내 캐릭터 장착장비 확인 Source

  • 던담 페이지에 있는 모든 주소를 크롤링하고 싶었지만 아직 그 방법까지는 못갔네요.,...하지만 페이지 내에 있는 모든 캐릭터들의 장비 정보를 크롤링할 수 있다는 것에 그저 뿌듯합니다..ㅠ 
  • 파일은 CSV파일로 저장하도록 하였으며 추가적인 전처리 방법은 저는 SQL을 이용하려 합니다. (강사님께 다음 기회에 더 깔끔한 전처리 방법을 문의 드리도록 하겠습니다.)
import os

#링크별 캐릭터 장착장비 크롤링 함수
def link_solution(link) : 
    url = "https://dundam.xyz/{}"
    driver.get(url.format(link))
    time.sleep(2)
    bs = BS(driver.page_source)
    if not os.path.isdir("./dundam"):
        os.mkdir("./dundam")
    
    name = bs.find("li", class_ = 'nk').text.split('\n')[1:][:-1]
    server = bs.find("li", class_ = 'sev').text
    
    with open(f"./dundam/{name}-{server}.txt", "w", encoding = 'utf-8') as f:
        f.write(a_list)
        
# 링크 반복을 통한 페이지 내 캐릭터 장착장비 저장
import tqdm
for x in tqdm.tqdm(link):
    link_solution(x)

 

이렇게 오늘 하루 크롤링 Source 다듬기와 프로그래머스 코딩테스트를 공부했습니다. 크롤링보다 코딩테스트가 더 어려운거 같네요...

 

이렇게 오늘로 한 주 동안 빼먹지 않고 복습하고 내용을 전달했다는 거에 

스스로 뿌듯해지기도 합니다.

 

주말에는 해당 크롤링 방식을 이용하여 던파 격투가(남)에 대한 정보를 크롤링하여 

던파DB분석 올리도록 하겠습니다.

 

감사합니다.

'DB 공부하기' 카테고리의 다른 글

230221_DB복습  (0) 2023.02.21
230220_DB복습  (0) 2023.02.20
230216_DB 복습  (0) 2023.02.16
230215_DB공부내용  (0) 2023.02.15
230214_DB공부내용  (0) 2023.02.14