오늘은 웹 스크래핑으로 웹 페이지의 정보를 한번에 가져와서 csv파일로 만들어볼 것이다.
(사실은 유튜브의 나도코딩 웹스크래핑에 있는 강의를 공부하며 작성하는 것임 ㅎ)
url = https://finance.naver.com/sise/sise_market_sum.nhn?sosok=0&page=1
네이버 주식 페이지로 들어가면 위와 같이 각 기업의 시가총액, 상장주식수, 외국인비율, 거래량, per 등의 정보를 한 눈에 볼 수 있다.
이 정보들을 한번에 csv 파일로 만들어보자!
먼저 필요한 것은
csv파일을 만들 것이므로 import csv를 해주고
beautifulsoup을 사용할 것이므로 import requests와 import BeautifulSoup을 해준다
그리고 사용할 url을 추가해준다
여기서 url이 page=1로 끝나는데, 1페이지를 넘어서 2페이지, 3페이지 더 넘어서 사용하기 위해서는 page= 까지만 작성하고,
후에 for 반복문을 사용해서 url = 'https ~~~ page=' + i 형식으로 해서 계속 페이지를 넘어가게 할 수 있을 것이다.
그렇다면, 일단 1페이지에서 4페이지까지의 정보를 얻어오기 위해 for문을 사용하자
for page in range(1, 5):
res = requests.get(url + str(page))
res.raise_for_status()
soup = BeautifulSoup(res.text, 'lxml')
의 과정을 통해서 각 페이지 마다 beautifulsoup을 사용할 준비를 마친다.
다음 과정은 저장되는 파일의 형식을 저장해주어야 한다.
filename = '시가총액.csv'
f = open(filename, 'w', encoding='utf-8-sig', newline='')
writer = csv.writer(f)
을 해주면 저장되는 파일의 형식을 지정해줄 수 있다.
크롬 브라우저의 검사 탭을 이용하면 해당 페이지의 html 구조를 볼 수 있다.
위 표를 분석한 결과, 가장 큰 표는 table이라는 태그를 가지고, type_2라는 클래스를 가지고 있다.
하위에는 tbody 태그 내에서, 또 하위에 각각 tr, 그 밑에 td라는 태그에서 각 기업의 정보를 가지고 있다.
기업마다의 정보들을 가져오기 위해서는 tr에 대한 정보를 가져오면 된다.
그 후 tr 하위에 있는 td의 값을 가져오면 된다.
각 기업들의 정보를 모두 가져오기 위해
data_rows = soup.find('table', attrs={'class':'type_2'}).find('tbody').find_all('tr')
의 식을 쓸 수 있다.
후에 for문을 통해 각 tr안의 기업들의 데이터 값, 즉 td들을 가공해줄 것이다.
일단 각 열의 정보들을 모두 가져와야 하므로 columns라는 변수들을 만들고
columns = row.find_all('td')를 통해 이를 수행해준다.
그런데 위의 html에서 볼 수 있듯이 아무 정보가 들어있지 않은 tr도 존재한다. 이것은 위 column의 length을 측정함으로써 필터링할 수 있을 것이다.
이는 if len(columns) <= 1:
continue 의 수식으로 나타낼 수 있다.
이제 columns를 통해 추출한 정보들을 가공하여 data로 넣어주면 된다.
이 과정에서는 a for a in b 라는 공식을 사용해볼 것이다. 각 column에서 text만 추출하기 위해서 get_text를 사용하고, 추출한 텍스트에서 공백을 없애기 위해 strip()을 사용할 것이다.
data = [column.get_text().strip() for column in columns]
이렇게 하면 data라는 변수에 for 반복문을 통해서 각 열의 기업정보들을 넣을 수 있다.
이것을 파일에 write하기 위해서
writer.writerow(data)를 해주면 된다.
이렇게 하면, 제일 윗 행에 항목들에 대한 정보를 제외 된 채로 나오게 된다.
마지막 과정으로, url에서 위 항목들을 복사 한 후,
title = 'N종목명 현재가 전일비 등락률 액면가 시가총액 상장주식수 외국인비율 거래량 PER ROE'.split('\t')
writer.writerow(title)
을 상단에 해주면 복사한 항목들이 리스트 형태로 되어, 가장 윗 행에 항목 정보가 들어가게 된다.
이 과정을 거친 후 실행을 해주면,
시가총액.csv라는 파일이 생성된다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
[python] 웹 스크래핑으로 멜론 차트 100 가져오기 (0) | 2021.09.26 |
---|---|
[python] BeautifulSoup 사용 (0) | 2021.09.06 |
[python] 웹 스크래핑에 앞서 request 모듈과 User Agent에 대하여. (0) | 2021.09.05 |
[python] pip과 pip3의 차이점, --user의 의미 (0) | 2021.08.26 |
[python] python에서 matplotlib 설치하기 (0) | 2021.08.23 |