728x90
반응형

안녕하세요! 오늘은 원신 나무위키에 플레이어블 캐릭터성유물 카테고리의 글을 크롤링하는 코드에 대해 포스팅 진행하겠습니다.

해당 포스팅에서는 전체 코드와 결과물 이미지만 첨부합니다.

크롤링의 자세한 과정은 추후에 포스팅 진행하도록 하겠습니다.

 

해당 크롤링은 원신 각 캐릭터의 성유물 추천 옵션과 세트를 빠르게 파악하기 위한 데이터 수집을 목적으로 하고 있습니다!

나무위키에서 수집할 정보는 아래와 같습니다.

※ 사진 속 정보는 나히다를 예시로 한 것입니다.

1. 캐릭터의 이름, 속성, 무기

 

2. 권장 성유물 옵션

 

3. 추천 성유물 세트 및 설명

 

4. 성유물 이름, 세트 효과, 획득처

 

  • 크롤링 진행 방식

크롤링은 총 3개의 코드로 진행을 합니다.

 

  • 첫 번째 코드
  1. 원신 캐릭터의 상세 정보가 담긴 링크를 전부 긁어옵니다.
  2. 캐릭터의 이름과 링크만 저장하여 하나의 엑셀 파일로 저장합니다.
  • 두 번째 코드
  1. 첫 번째 코드에서 저장한 엑셀 파일에서 각 캐릭터의 상세 정보 링크를 가져옵니다.
  2. 캐릭터의 속성, 무기, 권장 성유물 옵션, 추천 성유물 세트 및 상세 설명의 내용을 가지고 옵니다.
  3. 캐릭터의 이름, 속성, 무기 권장 성유물 옵션을 저장하여 하나의 엑셀 파일로 저장합니다.
  4. 캐릭터의 이름, 추천 성유물 세트, 상세 설명을 저장하여 하나의 엑셀 파일로 저장합니다.

엑셀 파일을 두 개로 나눈 이유는 이후에 원신 캐릭터 성유물을 조회하는 엑셀 파일을 쉽게 만들기 위해서 입니다!

  • 세번째 코드
  1. 성유물 세트 이름, 2세트, 4세트, 획득처의 내용을 가지고 옵니다.
  2. 획득처에서 비경의 이름을 분리합니다.
  3. 성유물 세트 이름, 2세트, 4세트, 획득처, 비경의 이름을 저장하여 하나의 엑셀 파일로 저장합니다.

비경 이름을 분리한 이유는 이후 원신 캐릭터 성유물을 조회하는 엑셀 파일을 쉽게 만들기 위해서 입니다!

 

[실제 코드 및 결과물]

  • 첫 번째 코드
import pandas as pd
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as E
from openpyxl import *

# 원신/캐릭터 나무위키 링크
link = 'https://namu.wiki/w/%EC%9B%90%EC%8B%A0/%EC%BA%90%EB%A6%AD%ED%84%B0'

# 나무위키는 BeautifulSoup이 먹히지 않기 때문에 동적 크롤링으로 진행
driver = webdriver.Chrome('chromedriver.exe')
driver.get(link)
time.sleep(3)

# '원소별' 버튼 클릭
button = list(driver.find_elements(By.CLASS_NAME, "_3xTXXXtF"))
button[1].click()
time.sleep(3)

Character = pd.DataFrame({'캐릭터 이름' : [], '링크' : []})

character_info = driver.find_elements(By.CLASS_NAME, "s3zppxXT")

for i in range(len(character_info)) :
    character = character_info[i]
    # 캐릭터 이름만 담기 위해서 데이터를 정제하는 부분
    # 캐릭터의 소개가 끝나는 부분
    if character.text == '취소선' :
        break
    # 주인공 캐릭터인 아이테르와 루미네는 데이터 수집에서 제외
    # 캐릭터 이름이 아닌데, 들어온 정보는 모두 제외
    if character.text == '' or  '원신' in character.text or '아이테르' in character.text or character.text in ['불', '물', '바람', '번개', '풀', '얼음', '바위'] :
        pass
    else :
    	# 캐릭터의 이름
        name = character.text
        # 캐릭터의 이름이 길 경우, 엔터로 구분이 되어있기 때문에 이를 띄어쓰기로 변경
        if '\n' in name :
            name = name.replace('\n', ' ')
        Char = [name, str(character.get_attribute('href'))]
        Character.loc[i] = Char

with pd.ExcelWriter('genshin_link.xlsx') as writer :
    Character.to_excel(writer, sheet_name='링크', index=False)

 

  • 첫 번째 코드 결과물

 

  • 두 번째 코드
import pandas as pd
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as E
from openpyxl import *

# 캐릭터의 이름과 상세정보 링크가 담긴 엑셀 파일
link = pd.read_excel('genshin_link.xlsx')
Main_link = list(link['링크'])
Character = list(link['캐릭터 이름'])

Information = pd.DataFrame({'캐릭터 이름' : [], '무기' : [], '시간의 모래' : [], '공간의 성배' : [], '이성의 왕관' : [], '부옵션' : []})
Relic_Information = pd.DataFrame({'캐릭터 이름' : [], '성유물' : [], '평가': []})

driver = webdriver.Chrome('chromedriver.exe')

# 엑셀 전체 인덱스를 의미
# 저장할 엑셀이 두 개이기 때문에 인덱스도 두 개가 필요
total_index = 0
relic_index = 0

# 특정 캐릭터의 상세정보에서 오류가 발생할 경우을 대비
try :
    for k in range(len(Main_link)) :
        driver.get(Main_link[k])
        time.sleep(3)
        
        # 캐릭터의 무기 수집 과정
        attack = driver.find_elements(By.CLASS_NAME, 'cIflhYhI')
        for i in range(len(attack)) :
            if '무기' == attack[i].text :
                attack_index = i+1
                break
        weapon = attack[attack_index].text
        
        # 캐릭터의 성유물 수집 과정
        info = driver.find_elements(By.CLASS_NAME, 'D7SMSdcV')
        for i in range(len(info)) :
        	# 권장 성유물 옵션을 파악하기 위해 위치를 저장
            if '권장 성유물' in info[i].text :
                index = i
                break
        # 권성유물의 정보가 담긴 공간
        sung = info[index]
        
        # 권장 성유물 옵션 수집 과정
        options = sung.find_elements(By.CLASS_NAME, 'cIflhYhI')
        Option = [Character[k], weapon]
        for j in range(len(options)) :
        	# 권장 성유물 옵션에서 필요한 정보가 들어있는 부분
            if j in [4, 5, 6, 8] :
                option = options[j].text
                # 옵션이 여러 개일 경우, 줄바꿈으로 구분하기 때문에 이를 / 구분으로 변경
                if '\n' in option :
                    option = option.replace('\n', ' / ')
                Option.append(option)
        # 권장 성유물의 옵션만 담는 부분
        Information.loc[total_index] = Option
        total_index = total_index+1
        
        # 추천 성유물 세트 및 상세 설명 수집 과정
        sets = sung.find_elements(By.CLASS_NAME, 'W078FM6Z')
        # 성유물 세트는 캐릭터마다 여러 개 존재하기 때문에 이를 구분하기 위한 부분
        character_number = 1
        for j in range(len(sets)) :
            # li로 구분되어 있는데, 그 안에 div가 같이 들어가 있기 때문에 문제가 발생한다.
            relic_info = list(sets[j].text.split('\n'))
            for m in range(len(relic_info)) :
            	# 실제 정보가 들어가 있는 부분
                if m%2 == 1:
                    one_set = relic_info[m-1]
                    set_info =relic_info[m]
                    character_name = Character[k]+'%d' %(character_number)
                    Option = [character_name, one_set, set_info]
                    Relic_Information.loc[relic_index] = Option
                    character_number = character_number+1
                    relic_index = relic_index+1
except Exception as e :
    print(e)
    print(Main_link[k])
        
with pd.ExcelWriter('genshin.xlsx') as writer :
    Information.to_excel(writer, sheet_name='성유물 옵션', index=False)

with pd.ExcelWriter('genshin_set_relic.xlsx') as writer :
    Relic_Information.to_excel(writer, sheet_name='성유물', index=False)

 

  • 두 번째 코드 결과물

 

  • 세 번째 코드
import pandas as pd
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as E
from openpyxl import *

# 원신/성유물 나무위키 링크
link = 'https://namu.wiki/w/%EC%9B%90%EC%8B%A0/%EC%84%B1%EC%9C%A0%EB%AC%BC'

driver = webdriver.Chrome('chromedriver.exe')
driver.get(link)
time.sleep(3)

Relic = pd.DataFrame({'성유물 세트' : [], '2세트' : [], '4세트' : [], '획득처' : [], '비경' : []})
total_index = 0

# 성유물 세트 효과 수집 과정
info = driver.find_elements(By.CLASS_NAME, 'TiHaw-AK._6803dcde6a09ae387f9994555e73dfd7')
for i in range(len(info)) :
    # 첫 번째 성유물이 검투사의 피날레이기 때문에 해당 부분이 기준
    # 여기서부터 끝까지가 성유물에 대한 정보가 존재
    if '검투사' in info[i].text :
        index_start = i
        break
# 전체적으로 3단위로 원하는 정보가 있음
for i in range(index_start, len(info), 3) :
    relic_info = info[i].text.split('\n')
    # 1세트 효과가 있는 4성 성유물은 생략한다.
    if '모시는 자' in relic_info[0] :
        continue
    # 획득처에서 비경을 구분하는 과정
    if '비경' in  relic_info[7] :
        place_index_start = relic_info[7].index(':')
        place = relic_info[7][place_index_start+2:]
        if ',' in place :
            place_end_index = place.index(',')
            place = place[:place_end_index]
    else :
        place = ''
    relic = [relic_info[0], relic_info[3], relic_info[5], relic_info[7], place]
    Relic.loc[total_index] = relic
    total_index = total_index+1

with pd.ExcelWriter('genshin_relic.xlsx') as writer :
    Relic.to_excel(writer, sheet_name='성유물', index=False)

 

  • 세 번째 코드 결과물

 

해당 데이터를 활용하여 원신 캐릭터의 성유물을 엑셀에서 쉽게 조회하는 포스팅은 아래에서 확인해주세요!

https://yhj9855.com/entry/%EC%9B%90%EC%8B%A0-%EC%84%B1%EC%9C%A0%EB%AC%BC-%EC%84%B8%ED%8C%85-%EC%97%91%EC%85%80%EB%A1%9C-%EC%89%BD%EA%B2%8C-%EB%B3%B4%EA%B8%B0-45-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EA%B8%B0%EC%A4%80-%EC%B9%98%EC%98%A4%EB%A6%AC-%ED%8F%AC%ED%95%A8

 

[원신] 성유물 세팅 엑셀로 쉽게 보기 (4.5 업데이트 기준, 치오리 포함)

안녕하세요! 오늘은 원신 4.5 업데이트 모든 캐릭터 성유물 세팅 포스팅을 진행하겠습니다. 4.5 업데이트는 간단한 업데이트여서 호다닥 갖고 왔습니다. 캐릭터의 성유물 세팅은 엑셀 내 저장되

yhj9855.com

 

코드에 대해 궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다!

★읽어주셔서 감사합니다★

728x90
반응형
728x90
반응형

안녕하세요!

오늘은 원신 4.5 업데이트 모든 캐릭터 성유물 세팅 포스팅을 진행하겠습니다.

4.5 업데이트는 간단한 업데이트여서 호다닥 갖고 왔습니다.

 

캐릭터의 성유물 세팅은 엑셀 내 저장되어 있으며, 조회를 통해서 쉽게 보실 수 있습니다!

엑셀 파일을 조회하는 방법은 아래 포스팅을 참고 해주세요:)

https://yhj9855.tistory.com/entry/%EC%9B%90%EC%8B%A0-%EC%84%B1%EC%9C%A0%EB%AC%BC-%EC%84%B8%ED%8C%85-%EC%97%91%EC%85%80-%ED%8C%8C%EC%9D%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

[원신] 성유물 세팅 엑셀 파일 사용하는 방법

안녕하세요. 오늘은 제가 만든 원신 성유물 세팅이 담긴 엑셀 파일을 사용하는 방법에 대해서 포스팅 하겠습니다. 원신은 캐릭터마다 어울리는 성유물 세팅을 해주는 것이 거의 엔드 콘텐츠로

yhj9855.com

4.5업데이트 기준으로 치오리까지 캐릭터가 존재합니다!

성유물 세팅의 정보는 나무위키를 기반으로 하고 있습니다!

 

원신에서 가장 애매한 바위 원소 캐릭터가 등장했습니다...

생긴 건 정말 제 취향이지만.. 솔직히 성능이 좋지 않고

무엇보다 후반에 느비예트가 복각하기 때문에 뽑지는 않을 것 같네요ㅠㅠㅠ

 

궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

엑셀 파일은 아래 파일 다운 받아주시면 됩니다!!

원신(4.5업데이트 기준).xlsx
0.13MB

★읽어주셔서 감사합니다★

728x90
반응형
728x90
반응형

안녕하세요!

오늘은 원신 4.4 업데이트 모든 캐릭터 성유물 세팅 포스팅을 진행하겠습니다.

4.4로 업데이트 된지 조금...많이? 날짜가 지났는데 계속 바빠서 정리를 못했네요ㅠㅠㅠ

 

캐릭터의 성유물 세팅은 엑셀 내 저장되어 있으며, 조회를 통해서 쉽게 보실 수 있습니다!

엑셀 파일을 조회하는 방법은 아래 포스팅을 참고 해주세요:)

https://yhj9855.tistory.com/entry/%EC%9B%90%EC%8B%A0-%EC%84%B1%EC%9C%A0%EB%AC%BC-%EC%84%B8%ED%8C%85-%EC%97%91%EC%85%80-%ED%8C%8C%EC%9D%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

[원신] 성유물 세팅 엑셀 파일 사용하는 방법

안녕하세요. 오늘은 제가 만든 원신 성유물 세팅이 담긴 엑셀 파일을 사용하는 방법에 대해서 포스팅 하겠습니다. 원신은 캐릭터마다 어울리는 성유물 세팅을 해주는 것이 거의 엔드 콘텐츠로

yhj9855.com

4.4업데이트 기준으로 가명, 한운까지 캐릭터가 존재합니다.

성유물 세팅의 정보는 나무위키를 기반으로 하고 있습니다!

 

제가 필드 파티는 덱 압축을 잘하지 않는 편이라서 그런지 그렇게 크게 다가오지는 않았네요ㅠㅠ

오히려 복각한 캐릭터에 더 집중했던 것 같습니다...

그래도 낙하 공격이 정말 좋기 때문에 바람 원소에 적절한 캐릭터가 없으면 뽑으시는 것도 좋을 것 같네요:)

 

궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

엑셀 파일은 아래 파일 다운 받아주시면 됩니다!!

원신(4.4업데이트 기준).xlsx
0.13MB

 

★읽어주셔서 감사합니다★

728x90
반응형
728x90
반응형

안녕하세요. 오늘은 호요버스의 인기 게임 원신의 모든 캐릭터 성유물 세팅 포스팅을 진행하겠습니다.

 

캐릭터의 성유물 세팅은 엑셀 내 저장되어 있으며, 조회를 통해서 쉽게 보실 수 있습니다!

4.2 업데이트 기준으로 샤를로트까지 캐릭터가 존재합니다.

성유물 세팅의 정보는 나무위키를 기반으로 하고 있습니다!

 

엑셀 파일을 조회하는 방법을 아래 포스팅을 참고해주세요!

https://yhj9855.com/tistory/entry/%EC%9B%90%EC%8B%A0-%EC%84%B1%EC%9C%A0%EB%AC%BC-%EC%84%B8%ED%8C%85-%EC%97%91%EC%85%80-%ED%8C%8C%EC%9D%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

[원신 성유물 세팅 엑셀 파일 사용하는 방법

안녕하세요. 오늘은 제가 만든 원신 성유물 세팅이 담긴 엑셀 파일을 사용하는 방법에 대해서 포스팅 하겠습니다. 원신은 캐릭터마다 어울리는 성유물 세팅을 해주는 것이 거의 엔드 콘텐츠로

yhj9855.com

 

궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다!

엑셀 파일은 아래 파일을 다운 받아 주시면 됩니다!!

원신(4.2업데이트 기준).xlsx
0.12MB

★ 읽어주셔서 감사합니다★

728x90
반응형
728x90
반응형

그냥 그림이 이뻐서..,

안녕하세요. 오늘은 제가 만든 원신 성유물 세팅이 담긴 엑셀 파일을 사용하는 방법에 대해서 포스팅 하겠습니다.

 

원신은 캐릭터마다 어울리는 성유물 세팅을 해주는 것이 거의 엔드 콘텐츠로 불릴만큼 성유물 세팅을 하는 게 중요한 게임인데요.

캐릭도 많고, 옵션도 많고, 세트도 많고 이름도 입에 잘 안 붙어서 그런지 캐릭터 세팅을 할 때마다 나무위키에서 찾아봤는데, 그게 너무 귀찮더라구요...

그래서 나무위키를 크롤링 진행하여, 캐릭터마다 필요한 성유물 세팅을 엑셀 파일로 한 번에 보기 좋게 만들었습니다!

저는 개인적으로 너무 편하게 쓰고 있어요:)

엑셀 내 표기되는 정보

  1. 시간의 모래, 공간의 성배, 이성의 왕관 권장 성유물 옵션과 추천 부옵션
  2. 추천 성유물 세트
  3. 성유물 획득처 (비경 이름)
  4. 각 추천 성유물 세트 효과 및 상세 설명

엑셀 파일 사용 방법

1. 다운받은 엑셀 파일을 실행합니다.

2. '원신 조회' 시트에서 '원소 선택' 아래 빈 칸을 클릭합니다.

3. 클릭 시 등장하는 ▼ 버튼을 클릭합니다.

4. 원하는 캐릭터의 원소를 클릭합니다.

5. '캐릭터 이름' 아래 빈 칸을 클릭합니다.

6. 클릭 시 등장하는 ▼ 버튼을 클릭합니다.

7. 원하는 캐릭터 이름을 클릭합니다.

    ※ 캐릭터의 이름은 원소에 맞게 선택지가 존재합니다.

8. '원신 조회' 시트와 '성유물 상세' 시트에 자동으로 데이터가 나타나게 됩니다.

 

엑셀 파일은 지속적으로 캐릭터를 추가해줘야 하기 때문에 캐릭터가 추가되는 업데이트마다 포스팅을 진행하면서 첨부할 예정입니다.

만드는 과정을 차차 포스팅 진행하도록 하겠습니다!

궁금한 부분이 있으시거나, 추가로 원하시는게 더 있으신 분들은 댓글로 남겨주시면 답변 드리도록 하겠습니다.

★ 읽어주셔서 감사합니다★

728x90
반응형

+ Recent posts