Seongwon Lim

[Python] 크롤링 데이터 엑셀 파일(xlsx)로 저장하기 본문

Python

[Python] 크롤링 데이터 엑셀 파일(xlsx)로 저장하기

limsw 2022. 5. 8. 16:48
반응형

서론

이전 포스팅 글에서는 크롤링을 이용해서 네이버 주식 페이지에서 국내 증시 상위 50개의 종목 이름과 가격을 가져오는 기능을 구현한 뒤 csv파일로 결과를 저장하는 방법을 알아보았다. 이번에는 동일한 결과를 엑셀 파일(.xlsx)로 저장하는 방법을 알아보고자 한다.

구현하기

파이썬에서 엑셀 파일을 만들기 위해서는 라이브러리가 필요한데 필자는 openpyxl 이라는 라이브러리를 이용했다.

먼저 pip install openpyxl 명령어로 라이브러리를 설치한다.

res = requests.get("https://finance.naver.com/sise/sise_market_sum.naver?&page=1")

soup = BeautifulSoup(res.content, 'html.parser')

company = soup.select('tbody > tr > td:nth-child(2) > a')
market_price = soup.select('tbody > tr > td:nth-child(3)')

dataset = []
for company, price in zip(company, market_price):
    dataset.append([company.text, price.text])

기존 코드는 위와 같으며 이제 dataset변수에 있는 데이터를 엑셀 파일로 저장해보자.

excel = openpyxl.Workbook()
sheet = excel.active  # 엑셀 시트를 활성화한다.

sheet.title = "시가 총액 상위 50개 목록"

for data in dataset:
    sheet.append(data)

excel.save('result.xlsx')

Workbook() 메서드를 사용하면 엑셀 파일의 생성을 정의할 수 있다.
그리고 엑셀 파일안에 있는 시트를 .active를 통해 활성화하여 해당 엑셀 파일의 시트에 접근할 수 있도록 했다.

 

sheetname.title = ...는 해당 시트의 이름을 정의할 수 있다. 시트를 모두 정의한 뒤에는 파일을 .save()를 이용해서 저장한다. 이 때 인자로는 저장될 파일의 이름을 명시하면 된다.

결과 확인하기

코드를 실행하면 result.xslx라는 파일이 생성되며 내용은 위와 같다. 시트의 이름이 설정한 값으로 적절하게 저장된 것을 확인할 수 있으며 데이터 또한 2개의 컬럼에 종목명, 현재가 순서대로 저장된 것을 확인할 수 있다.

번외 - 시트 커스터마이징

위 결과를 보면 A컬럼에 있는 값들 중에서 종목 이름이 긴 경우 짤려서 보이는 항목이 존재한다. openpyxl 라이브러리는 코드를 통해서 컬럼의 너비를 조정할 수 있다.

sheet.column_dimensions['A'].width = 30

해당 코드를 파일에 추가하면 A컬럼에 해당하는 너비를 30으로 지정한다는 뜻이다. 코드를 넣고 다시 실행하면 다음과 같은 결과를 얻을 수 있다.

A컬럼의 너비가 늘어난 것을 확인할 수 있다.

Comments