셀레늄으로 웹 크롤링 중 IF문 사용하고나서 데이터 저장이 제대로 안됩니다.

조회수 1357회

IF Else 구문으로 '셀러회원'이 나오면 다음글 클릭하고 아니면 데이터 수집하라는 명령을 쳤는데 데이터를 수집하면 1줄의 데이터만 저장이 되네요. 여러 데이터를 쌓아올리는 수정이 필요해 보입니다. 부탁드립니다.

for i in range(1, total_pages):

#크롤링 시작
print('[',i,'/', total_pages,']')


  # 회원등급
cont_level = driver.find_element_by_class_name('nick_level').text

if cont_level == '◆셀러회원◆' :
    pass
    driver.find_element_by_link_text('다음글').click()
    time.sleep(1)

else :
#회원등급(셀러회원제외)    
    cont_levels = driver.find_element_by_class_name('nick_level').text

    try:
    # 게시물 URL
        cont_url = driver.find_element_by_xpath('//*[@id="spiButton"]').get_attribute('data-url')

    # 게시물 번호
        cont_id = cont_url.split('/')[-1]

    # 게시물 작성일
        cont_date = driver.find_element_by_class_name('date').text
        print(cont_id,' ',cont_date)

    # 게시물 작성자
        cont_author = driver.find_element_by_class_name('nick_box').text
    except Exception as error: # 로딩 실패시 재시도
            print(error)
    time.sleep(delay)
    pass

# 상품상태 / 결제방법 / 배송바법 / 거래지역
    try:
        cont_detail = driver.find_element_by_class_name('section').text
    except NosuchElementException:
        pass

#댓글수
    try: review_count = driver.find_element_by_class_name('num').text
    except : review_count = ""


  # 판매 상태 정보
    try:
            status = driver.find_element_by_css_selector('.SaleLabel').text
    except:
            status = ""

# 게시물 가격
    try:
            cont_price = driver.find_element_by_class_name('cost').text
            cont_price = cont_price.replace('원','')
            cont_price = cont_price.replace(',','')

    except: # 가격이 없는 글이면 크롤링 부적절(이 경우 DB에 저장하지 않고 넘어감)
        print(cont_id, 'is invalid article')
        cont_id=None
    pass

    if cont_id != None:
            # 게시물 제목
                cont_title = driver.find_element_by_class_name('title_text').text
            # 게시물 내용
    try: # 본문이 se-main-container 타입인 경우
                cont_explanation = driver.find_element_by_class_name('se-main-container').text
    except NoSuchElementException: # 본문이 ContentRenderer 타입인 경우
                cont_explanation = driver.find_element_by_class_name('ContentRenderer').text
    except Exception as error: # 로딩 실패시 재시도
            print(error)
    pass

             # 판매자 연락처 / 이메일
driver.find_element_by_css_selector('button.btn_text').click()
cont_seller = driver.find_element_by_class_name('contact_box').text

results= []
data = [cont_url, cont_id ,cont_date, cont_author, cont_price, cont_title, cont_explanation, cont_seller, cont_levels, review_count,
               cont_detail] #게시물 1개씩 저장
results.append(data)    


driver.find_element_by_link_text('다음글').click()                
time.sleep(3)
  • 자세히 보지는 않았지만, 일단 `results = []` 은 for문 밖에 있어야 할텐데요... whistler7899 2021.8.14 18:38

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

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

(ಠ_ಠ)
(ಠ‿ಠ)