think deeply

ValueError: arrays must all be same length (feat. 크롤링 에러 발생) 본문

rainbow/에러

ValueError: arrays must all be same length (feat. 크롤링 에러 발생)

윌_ 2023. 9. 17. 12:14

오류 발생 코드

# 데이터프레임 생성
lyrics_df = pd.DataFrame(columns=['Song', 'Singer', 'Lyrics'])


song = []
singer = []
lyrics = []

#--------------------------------------------------------------------------------------------------

# 플레이리스트 내 수록곡 Length
song_list = driver.find_elements(By.XPATH,'//*[@id="frm"]/div/table/tbody')

song_list_li = []

for element in song_list:
    tr_elements = element.find_elements(By.TAG_NAME, 'tr')
    song_list_li.extend(tr_elements)
    driver.implicitly_wait(2)
song_list_len = len(song_list_li)

#--------------------------------------------------------------------------------------------------

# 수록곡 수많큼 반복  
for i4 in range(1, song_list_len+1):  # 우선은 4곡씩만 가사 가져와보기

    # 가사 페이지 클릭
    lyric_button_list = driver.find_elements(By.XPATH,'//*[@id="frm"]/div/table/tbody/tr[{}]/td[4]/div/a'.format(i4)) 
                                                          
    if lyric_button_list:
        lyric_button = lyric_button_list[0] 
        lyric_button.click()
    else:
        print(f"No element found for index {i4}")
    driver.implicitly_wait(2)
    sleep(0.3)

    # 가사 element 저장
    try: 
        r = driver.find_elements(By.XPATH,'//*[@id="d_video_summary"]')
        for element in r:
            try:
                text = element.text
                lyrics.append(text)

            except Exception as e:
                print(f"An error occurred while writing to the file: {str(e)}")

        
        song_name = driver.find_elements(By.XPATH,'//*[@id="downloadfrm"]/div/div/div[2]/div[1]/div[1]')
        for element in song_name:
            try:
                text = element.text
                song.append(text)

            except Exception as e:
                print(f"An error occurred while writing to the file: {str(e)}")

                
        singer_name = driver.find_elements(By.XPATH,'//*[@id="downloadfrm"]/div/div/div[2]/div[1]/div[2]/a/span[1]')
        for element in singer_name:
            try:
                text = element.text
                singer.append(text)

            except Exception as e:
                print(f"An error occurred while writing to the file: {str(e)}")
        
    except: pass

    driver.back()
    sleep(0.5)

# 데이터 프레임 
lyrics_df = pd.DataFrame({'Song': song, 'Singer' : singer, 'Lyrics': lyrics})

# 파일 저장
filename = '”사장님 지금 이 노래 뭐예요?“ 감성 넘치는 카페 BGM ❶.csv'
lyrics_df.to_csv(filename, index=False, encoding='utf-8')

해당 오류 발생

lyrics_df = pd.DataFrame({'Song': song, 'Singer' : singer, 'Lyrics': lyrics})  부분에서 아래 오류 발생


오류 사유

가수명을 array에 담았는데, 한 노래 당 여러명이 부른 노래가 있었고, 해당 칼럼만 길이가 달랐던 것!

해결방법

lyrics_df = pd.DataFrame.from_dict({'Song': song, 'Singer' : singer, 'Lyrics': lyrics}, orient ='index').T

으로 수정

Comments