기존 list안에 새로운 리스트로 append 하기

조회수 292회

쇼핑몰 웹크롤링 중,

구매항목 부분에서

구매수량 이라는 버튼이 있거나,

품절된 경우 버튼이 없고,

옵션이 여러개인 상품일경우(색상이나 크기) 여러가지 값이 나옵니다.

find_all 로 td class = "xxx" 를 찾는데

xxx가 2개 이상일 경우 리스트에 각각 추가되어

최종적으로 엑셀파일로 넣을때 ValueError: Length of values (36) does not match length of index (19) 에러가 납니다.

2개이상일 경우의 값까지 다 필요해서 리스트안에 리스트를 넣더라도 다 가져와야합니다..

예를들어

a = [ ]

b = [ ]

c = [ ] 수집할 리스트를 만들어놓고

a.append(url) #1개만 나옴

b.append(image) #1개만 나옴

c.append(text) # 3개 나옴

이렇게 나왔을 경우

a = [url]

b = [image]

c = [text1,text2,text3]

이렇게 추가되면서 문제가 발생합니다.

반복문으로 하다보면 c 리스트의 text만 숫자가 더 커지면서 문제가 발생하는것 같은데

a = [url1,url2]

b = [image1,image2]

c = [[text1-1,text1-2,text1-3],text2-1]

이렇게 리스트안에 리스트로 넣으면 될까 싶어 찾아보고 있는데 잘 안되서 질문남깁니다.

처음 코드로 보여드리면,

   # ..생략
links = [ ]
thumbnail = [ ]
option = [ ]

    links.append(baseurl+element.find("a")["href"])
    thumbnail.append("http://"+baseurl+element.select('img')[0].get('src'))        
    option_chk= soup3.find_all('td', {'class':'option_txt'})

    if len(option_chk):
            for i in option_chk:
                     option.append(i.string)

    else:
            option_chk == None
            option.append("품절")

    print(option)

이 부분입니다..

option_chk 라는 값이 1개거나 2개이상이거나 없을경우가 있습니다.

5가지 상품페이지를 크롤링했을때 option 리스트를 최종적으로 print해보면

['구매수량' , '구매수량', '품절', '빨간색', '파란색', '노란색', '구매수량']

이런식으로 나오는데

['구매수량' , '구매수량', '품절', ['빨간색', '파란색', '노란색'], '구매수량']

일단 이렇게라도 나오면 될것 같습니다...

리스트 안에 리스트로 넣는것도 나중에 엑셀로 추출할때 문제가 될수 있어서,

최종적으로는 ['구매수량' , '구매수량', '품절', '빨간색' + '파란색' + '노란색', '구매수량']

이렇게 한 값으로 묶고싶습니다.

초보자라 어떻게 설명해야 최대한 이해를 시킬지 고민하느라 글이 길어졌습니다. 답변 부탁드려요.. 감사합니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    에러 내용과 코드가 전혀 연관없는 부분을 잘라올린것 같네요.

    그러나 제시된 코드를 참고하면 이렇게 고치면 될 것 같습니다.

    links = [ ]
    thumbnail = [ ]
    option = [ ]
    
        links.append(baseurl+element.find("a")["href"])
        thumbnail.append("http://"+baseurl+element.select('img')[0].get('src'))        
        option_chk= soup3.find_all('td', {'class':'option_txt'})
    
        """
        if len(option_chk):
                for i in option_chk:
                         option.append(i.string)
    
        else:
                option_chk == None
                option.append("품절")
        """
        a = '+'.join([i.string for i in option_chk])
        if not a:
           a = '품절'
        option.append(a)
    
        print(option)
    
    • 감사합니다. 덕분에 join을 어떻게 쓰는지 이해했습니다! JJo 2022.9.26 17:54

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)