새소식

Python

TypeError: unsupported operand type(s) for +=: 'Tag' and 'str' 해결

  • -
반응형
 

에러설명

  • 파이썬으로 크롤링을 하는 와중에 추출한 text를 합쳐서 출력하려는데 자꾸 해당 에러가 발생함. 분명 모두 str일텐데 왜 'Tag'가 있지..?라는 생각으로 일단 type확인부터 하기로함.

에러해결

과정

1. 에러 확인을 위해 type을 확인 해보기!

...

for product_name in product_name_list:
    category = ""
    url = "https://search.shopping.naver.com/search/all?where=all&frm=NVSCTAB&query=" + \
        quote(product_name)
    print(product_name)
    if check_response(url):
        html = urlopen(url)
        soup = bs(html, "html.parser")
        category_data = soup.find(
            "div", attrs={"class": "basicList_depth__2QIie"})
        if not category_data:
            print("category_data가 없습니다.")
        else:
            category_list = category_data.find_all('span')
            for category in category_list:
                category_text = category.text
                category_text_str = str(category.text)
                print(f"type(category_text) : {type(category_text)}")
                print(f"type(category_text) : {type(category_text)}")
                
        print(category)
        print("-----------------------------")
        # category[product_name] = category
Semi Boots Cut Denim (Light Blue, Middle Blue)
type(category_text) : <class 'str'>
type(category_text) : <class 'str'>
type(category_text) : <class 'str'>
type(category_text) : <class 'str'>
type(category_text) : <class 'str'>
type(category_text) : <class 'str'>
<span class="basicList_category__wVevj basicList_nohover__1rebX">청바지</span>
-----------------------------
Slim Fit Square Neck T (White, Mustard, Black)
category_data가 없습니다.

-----------------------------
  • 모두 str이 나오길래 왜 에러가 났을까 생각하던 도중 마지막 줄에 tag가 출력된 것을 확인
  • 코드를 자세히 보니 for문의 변수가 category인 것을 발견함.
  • 해당 부분이 오류인 것 같아 for문의 변수를 바꿔보기로함.

2. for문의 변수 바꾸기

...

for product_name in product_name_list:
    category = ""
    url = "https://search.shopping.naver.com/search/all?where=all&frm=NVSCTAB&query=" + \
        quote(product_name)
    print(product_name)
    if check_response(url):
        html = urlopen(url)
        soup = bs(html, "html.parser")
        category_data = soup.find(
            "div", attrs={"class": "basicList_depth__2QIie"})
        if not category_data:
            print("category_data가 없습니다.")
        else:
            category_tag_list = category_data.find_all('span')
            for category_tag in category_tag_list:
                category_text = category_tag.text
                category_text_str = str(category_tag.text)
                print(f"type(category_text) : {type(category_text)}")
                print(f"type(category_text_str) : {type(category_text_str)}")
                
        print(category)
        print("-----------------------------")
Semi Boots Cut Denim (Light Blue, Middle Blue)
type(category_text) : <class 'str'>
type(category_text_str) : <class 'str'>       
type(category_text) : <class 'str'>
type(category_text_str) : <class 'str'>       
type(category_text) : <class 'str'>
type(category_text_str) : <class 'str'>       

-----------------------------
Slim Fit Square Neck T (White, Mustard, Black)
category_data가 없습니다.

-----------------------------
  • 확실히 Tag가 출력되지 않는다.

느낀점

  • for문 변수 사용시에 다른 변수와 겹치지 않은지 확인을 잘 해봐야되겠다!

작성일자 : 2022년 6월 12일

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.