기존 list안에 새로운 리스트로 append 하기
조회수 291회
쇼핑몰 웹크롤링 중,
구매항목 부분에서
구매수량 이라는 버튼이 있거나,
품절된 경우 버튼이 없고,
옵션이 여러개인 상품일경우(색상이나 크기) 여러가지 값이 나옵니다.
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 답변
-
에러 내용과 코드가 전혀 연관없는 부분을 잘라올린것 같네요.
그러나 제시된 코드를 참고하면 이렇게 고치면 될 것 같습니다.
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)
댓글 입력