인프런 커뮤니티 질문&답변

마루님의 프로필 이미지
마루

작성한 질문수

파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기

[질문] 웹 크롤링으로 데이터 수집 시 데이터 병합이 안되는 문제

작성

·

370

1

안녕하세요.

선생님 강의 잘 듣고 있습니다.

강의를 들으면서 책을 보고 웹 크롤링으로 데이터를 다운 받아 dataframe으로 전환

최종 엑셀로 저장하는 코드를 공부 하고 있습니다.

그런데 크롤링은 되는데 최종 엑셀 저장 파일을 보면 맨 처음 페이지만 저장 되는데요

아래 코드에서 잘못된게 있을까요?

그리고 break문을 적으면 SyntaxError: 'break' outside loop

에러가 나와 주석처리 했습니다. 

제가 워낙 초보라 답변을 주실 수 있는지요?

감사합니다.

# from selenium import webdriver # browser = webdriver.Chrome("/Users/maru/Downloads/chromedriver") # browser.get("https://seibro.or.kr/websquare/control.jsp?w2xPath=/IPORTAL/user/company/BIP_CNTS01042V.xml&menuNo=286#") search_btn = browser.find_element_by_id("image1") search_btn.click() html = browser.page_source from bs4 import BeautifulSoup from html_table_parser import parser_functions as parser import pandas as pd soup = BeautifulSoup(html, "html.parser") table = soup.find("table", attrs ={"id" : "grid1_body_table"}) p = parser.make2d(table) df = pd.DataFrame(p[2:], columns=p[1]) df.head() import time import random from tqdm import tqdm prev_no = 0 prev_table = None for i in tqdm(range(0,200)): try: next_btn = browser.find_element_by_id("cntsPaging01_next_btn") next_btn.click() except: time.sleep(2) try: next_btn = browser.find_element_by_id("cntsPaging01_next_btn") next_btn.click() except: time.sleep(2) next_btn = browser.find_element_by_id("cntsPaging01_next_btn") next_btn.click() def get_html(browser, cnt): if cnt >= 4: return -1, -1 html = browser.page_source soup = BeautifulSoup(html, "html.parser") cur_no = soup.find("a", sttrs = {"class" : "w2pageList_control_label w2pageList_label_selected"}) cur_no = cur_no.text table = soup.find("table", attrs={"id" : "grid1_body_table"}) if cur_no != prev_no and prev_table != table: return cur_no, table else: time.sleep(1) get_html(browser, cnt+1) cur_no, table = get_html(browser, 1) if cur_no == -1: print("\n종료. 테이블 정보가 바꾸지 않았습니다.") break p = parser.make2d(table) temp = pd.DataFrame(p[2:], columns=p[1]) df = pd.concat([df, temp], 0) prev_no = cur_no prev_table = html if cur_no == "95": print("\n 최종 페이지 도달") # break time.sleep(random.randrange(3, 5)) df.to_excel("stock_div.xlsx")

답변 1

0

박조은님의 프로필 이미지
박조은
지식공유자

안녕하세요.

코드를 올려주실 때 인덴트가 되도록 올려주셔야 답변을 드릴 수 있을거 같아요.

파이썬은 들여쓰기에 따라 동작이 달라지기 때문에 위와 같이 올려주시면 어떤 부분이 잘못되었는지 알기가 어려워요.

질문해 주신 오류도 break 문이 들여쓰기 위치에 맞지 않아서 난 오류로 보입니다.

파이썬은 들여쓰기로 블록을 구분하기 때문에 해당 break 문의 위치가 맞는지 확인해 보세요.

네 고맙습니다

마루님의 프로필 이미지
마루

작성한 질문수

질문하기