본문 바로가기
IT 프로그래밍/IT기기 이용

파이썬 주식정보 크롤링 하기(네이버 증권 페이지 이용하여 데이터 가져오기) [step3]

by Jango_infoinno 2023. 3. 16.

안녕하세요! 파이썬으로 주식정보 크롤링 하기 3번째!

오늘은 가져온 데이터를 파일로 만들어 보겠습니다!

이번이 파이썬 크롤링 마지막 단계입니다! 화이팅!

 

 

이제 데이터를 추출해 볼까요?

df = pd.read_html(browser.page_source)

#andas 라이브러리의 read_html 함수를 사용하여 현재 Selenium WebDriver로 열린 브라우저의 페이지 소스를 가져와 HTML 표(table) 데이터를 DataFrame 형식으로 읽어옵니다.

#browser.page_source는 현재 브라우저 페이지의 HTML 소스 코드를 문자열로 반환합니다. 이 소스 코드에서 pandas의 read_html 함수는 표 데이터를 검색하고, 각각의 표 데이터를 DataFrame 형식으로 반환합니다. 따라서 코드의 실행 결과인 df는 DataFrame을 원소로 갖는 리스트입니다. 리스트의 각 원소는 웹 페이지에서 읽어온 표 데이터를 DataFrame으로 나타낸 것입니다.

len(df) #df 변수가 담고 있는 리스트의 길이를 반환

#네이버 시가총액 페이지에 해당하는 표 데이터의 개수가 3개 있다.

df[0] , df[1], df[2] 가 있다는 것을 알 수 있습니다.

그럼 df[0] 를 알아볼까요?

df[0]은 목록이 저장된 테이블인것 같습니다.

df[1] 이 원하는 데이터 인 듯 합니다.

df[2]는 어떤 번호인 듯 한데.... 잘모르겠어요

df = pd.read_html(browser.page_source)[1] 추가해 줍니다.

#NaN 을 없애고 싶습니다.

불필요한 데이터를 날리기 위해서는 추가 코드가 필요합니다.

이부분에서 세로 빈 줄이 전체다 NaN으로 인식되는 것 같습니다.

df.dropna(axis = 'index',how= 'all', inplace= True)

# axis = 'index'는 NaN 포함하는 행이 아닌 열을 삭제해야 함을 지정

# how = 'all'은 모든 NaN 포함하는 행만 삭제해야 함을 지정

# inplace = True는 데이터프레임을 변경하지 않고(즉, 데이터프레임의 새 복사본을 만들지 않고) 해당 데이터프레임을 수정해야 함을 지정

터미널에 입력을 하고

10줄만 출력 해 볼까요?

>>> df.head(10) 를 입력해 줍니다.

 

왼쪽이 수정한 값 입니다.

행에 NaN값이 없어졌죠?

성공!!

이제 열에 있는 NaN 값을 지워볼까요?

이부분에서 NaN 값이 나오는 것 같네요

df.dropna(axis = 'columns' , how= 'all' , inplace= True)

# axis = 'columns' 이부분만 index -> columns으로 바뀌었습니다.

가로 세로 NaN 값이 없어졌어요!!

깔끔합니다.

이제 데이터 파일을 가져오는 작업을 해 볼까요?

'site.csv'라는 파일에 DataFrame(df)을 저장하는 코드

를 사용하려면

>>> import os

를 해야합니다.

f_name = 'site.csv' #f_name에 파일 이름 'site.csv'를 할당

if os.path.exists(f_name): #파일이 존재하는지 확인

df.to_csv(f_name,encodeing='utf-8-sig', index=False, mode='a', header=False)

#만약 파일이 존재한다면, df.to_csv 메서드를 사용하여 DataFrame을 해당 파일에 append mode(mode='a')로 저장

# encoding='utf-8-sig'은 UTF-8로 인코딩된 CSV 파일을 생성하는 것을 의미

else:

df.to_csv(f_name,encoding='utf-8-sig',index=False)

#파일이 존재하지 않는다면, df.to_csv 메서드를 사용하여 DataFrame을 해당 파일에 새로 저장

#위와 동일하게 encoding='utf-8-sig'은 UTF-8로 인코딩된 CSV 파일을 생성하는 것을 의미

# index=False는 CSV 파일에 인덱스를 포함시키지 않도록 설정

왼쪽에 site.csv 파일이 생겼습니다.

폴더에도 생겼네요

이렇게 생겼습니다.

print(f'{idx}페이지 완료')

# 네이버 시가총액 페이지는 총 37페이지가 있습니다. 한페이지가 완료되면 "페이지 완료" 가 출력되도록 코드를 짜줍니다.

총 37 페이지를 크롤링 하려면 반복문을 겉에 싸줘야 합니다.

for idx in range(1,40):

browser.get(url+str(idx))

##이 곳에 페이지 이동 코드 부터 입력해 줍니다.##

browser.quit() #브라우저 종료

+ 추가로

if len(df) ==0:

break

를 써야 합니다.

페이지는 37 페이지여서 df의 데이터가 0 이면 멈추라는 명령어를 넣어 줍니다.

끝입니다!

휴 고생하셨습니다.

밑에는 결과 영상입니다.

 

 

 

지금까지 봐주셔서 감사하고

좋은 정보 되셨길 바라면서 저는 이만!!

 

 

 

[참고영상: https://youtu.be/ZDh1C7qw0Rs]

 
반응형

댓글