[Python] BeautifulSoup find return None 처리
네이버 증권 페이지에서 시가총액 순으로 다양한 지표를 불러와서 원하는 데이터를 얻기 위한 스크랩핑 과정에서
발생한 에러 처리 내용 공유
하고 싶은 과제 : 네이버 증권에서 finance.naver.com//item/main.nhn?code='회사코드' 페이지에서
> 최근 ROE, PER, PBR 값을 불러와서 내가 원하는 기준을 초과하거나 미만인 경우를 선별하여 회사 반환
실행코드
sub_thead = sub_soup.find("table", attrs={"class":"tb_type1 tb_num tb_type1_ifrs"}).find("thead").find_all("th", attrs={"scope":"col"}) |
KODEX 200 - 네이버 금융 : 네이버 금융
관심종목의 실시간 주가를 가장 빠르게 확인하는 곳
finance.naver.com
여기에서 KODEX, 맥쿼리인프라, TIGER, 롯데리츠, 티와이홀딩스, 제이알글로벌리츠 등 ETF 종목은 기업실적분석 데이터를 보여주지 않는다. 이에 따라 위의 코드를 통해 각 기업의 실적분석데이터를 불러오려고 하면 아래와 같은 에러메시지를 나타낸다. 중첩된 find 문 과정에서 앞에 발생한 find 결과에서 None을 반환함에 따라 이후 thead 에서 찾는 데이터를 찾을 수 없다는 메시지이다.
Traceback (most recent call last): File "D:/develop/py_go/Python_test/kakao_test/stockList.py", line 134, in <module> sub_thead = sub_soup.find("table", attrs={"class":"tb_type1 tb_num tb_type1_ifrs"})\ AttributeError: 'NoneType' object has no attribute 'find'
Process finished with exit code 1 |
처음에는 무식한 방법으로 검색한 회사중 발생한 케이스를 제외하려 했지만, 경우의 수가 너무나 많았고 이런 비효율적인 방법은 정말 피하고 싶어서 return 값을 확인하여, 다음 find를 진행할 수 있도록 수정하였다.
결과값 None 일 결우 이후 find 실행
if sub_thead is not None: sub_thead = sub_thead.find("thead").find_all("th", attrs={"scope":"col"}) else: continue |