pip install requests
requests.get(URL)
pip install beutifulsoup4
BeautifulSoup(requests로 받아온 정보, "html.parser")
데이터 프레임 형식
을 다룰 수 있도록 해준다.(R처럼)엑셀
을 파이썬에서 다룰 수 있도록 하는 패키지이다.pip install openpyxl
wb = openpyxl.Workbook()
, sheet = wb.active
, sheet.append(arr)
...위에서 설명된 패키지들을 이용하여 웹 상의 정보를 가져와보자.
우선 웹 상에서 표 데이터에 해당하는 정보를 그대로 옮겨볼 것이다.
표를 그대로 옮기면 되기 때문에 비교적 쉬운 난이도이다.
데이터는 한 페이지 당 10개씩 있고, 총 110페이지가 존재한다.
내가 가져오고자 하는 데이터의 HTML 태그를 분석한다.
html tag
table.boardListSkin1 > tbody > tr > td
# 서울특별시 교육청 학력평가 자료 목록 크롤링 후 엑셀 파일 저장
# 1. 패키지 install
# pip install requests
# pip install beutifulsoup4
# pip install openpyxl
import requests
from bs4 import BeautifulSoup
import openpyxl
# 2. 내가 작업할 Workbook 생성하기
wb = openpyxl.Workbook()
# 3. 작업할 Workbook 내 Sheet 활성화
sheet = wb.active
# 4. 데이터 프레임 내 header(변수명) 생성
sheet.append(["번호", "학교", "학년", "연도", "월", "구분"])
# 데이터 크롤링 과정
for p in range(1, 111, 1):
if p != 1:
p = int(str(p-1) + "1") # 1 11 21 31 ... 1091 이렇게 증가함
raw = requests.get(f"https://www.sen.go.kr/web/services/bbs/bbsList.action?bbsBean.bbsCd=105&searchBean.searchKey=&appYn=&searchBean.searchVal=&searchBean.startDt=&startDt=&searchBean.endDt=&endDt=&ctgCd=&sex=&school=&grade=&year=&month=&schoolDiv=&establDiv=&hopearea=&searchBean.deptCd=&searchBean.currentPage={p}")
html = BeautifulSoup(raw.text, "html.parser")
container = html.select("table.boardListSkin1 tbody tr")
for c in container:
temp = c.find_all("td")
arr = []
for t in temp:
arr.append(t.text)
sheet.append(arr)
# 작업 마친 후 파일 저장(파일명 저장시 확장자 - .xlsx 필수!)
wb.save("new_test.xlsx")
select(html 태그)
를 통하여 container에 담아주고, container의 원소를 하나씩 꺼내서 td 속의 text를 추출하였다.sheet
에 append 해주었다.친구의 부탁으로 도전해 보았다. 사실 크롤링을 작년 이맘때 쯤 살짝 맛만 본 상태라 자신이 없었지만, 표를 엑셀로 그대로 옮기면 된다는 생각이 들어 시도하게 되었다.
생각보다 구현하는 것이 간단했고, 가져오려는 웹의 url이 페이지마다 어떻게 변하는지를 체크하고, 어떤 html tag로 구성이 되어있는지를 확인하는 것이 핵심이었다.
이번 기회를 통해 도전하는 것에 대한 자신감이 생겼고, 어떤 일이 있더라도 구글링과 사전 지식의 조합으로 해결 할 수 있을 것이란 믿음이 생겼다.
다음 번에는 selenium
을 통해 직접 웹을 driver로 켜보고, 자동으로 클릭 및 동작을 하는 것을 해보려고 한다.