Language/python
웹에서 스크래핑한 데이터 csv 파일로 저장, csv 에서 인코딩 깨질 때 해결 방법
이유즈
2021. 3. 24. 21:35
728x90
나도코딩님의 수업을 듣고 따로 정리한 것입니다.
시가총액 200위를 네이버에서 검색 후 csv 파일에 넣고 저장하는 작업입니다.
먼저 코드!
import csv
import requests
from bs4 import BeautifulSoup
url = "https://finance.naver.com/sise/sise_market_sum.nhn?&page=1"
filename = "시가총액1-200.csv"
f = open(filename, "w", encoding="utf-8-sig", newline="") # newline : 공백으로 하면 자동 줄바꿈됨.
writer = csv.writer(f)
title = "N 종목명 현재가 전일비 등락률 액면가 시가총액 상장주식수 외국인비율 거래량 PER ROE".split("\t")
# ["N", "종목명", "현재가"]
print(type(title))
writer.writerow(title)
for page in range(1,5):
res = requests.get(url + str(page)) #url 정보, 페이지 숫자 넣어주기
res.raise_for_status()
soup = BeautifulSoup(res.text, "lxml")
data_rows=soup.find("table", attrs={"class":"type_2"}).find("tbody").find_all("tr")
for row in data_rows:
colums = row.find_all("td")
if len(colums) <= 1: # 의미없는 데이터는 skip
continue
data = [column.get_text() for column in colums]
# print(data)
writer.writerow(data)
만약 open 줄에서 encoding 을 ="utf8" 로 했다면 엑셀로 csv 파일을 보았을 때 한글이 깨져서 나온다.
이것의 해결방법은 utf-8-sig 을 넣어주는 것.
저장 후 실행을 누르면 vscode 옆 파일 칸에 내가 설정한 이름 (filename) 으로 생성된 것을 확인할 수 있다.
직접 폴더로 들어가서 엑셀 파일로 실행해보면
확인 가능 !!