전통주 데이터 크롤링 작업 및 DB 데이터 삽입
- 해외의 경우 술에 관련된 API 가 다수 존재
- 국내의 경우 각제조사별 술 데이터만 있을 뿐 한곳에 모여있는 데이터가 없음.
- 프로젝트를 진행하려면 술, 전통주에 대한 데이터가 필요한 상황이 였기 때문에 데이터를 어디서 가져와되는 상황
- 네이버 백과사전의 전통주에 대한 데이터가 있어 정보를 가져오기 로 결정하였음
1. 데이터 크롤링
1-1.파이썬을 이용한 데이터 크롤링
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
# 담아 둘 배열
links = []
titles1 = []
titles2 = []
contents = []
parts = []
alcs = []
prices = []
materials = []
manufacturers = []
addrs = []
imgs = []
stores = []
for i in range(0,59):
# 크롤링할 주소
page = requests.get("https://terms.naver.com/list.naver?cid=58637&categoryId=58637&page=%d" % i)
soup = bs(page.text, "html.parser")
# 가져올 항목
for j in range(1,16):
link = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div.subject > strong > a:nth-child(1)' % j )
title1 = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div.subject > strong > a:nth-child(1)' % j )
title2 = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div:nth-child(3) > div > span:nth-child(1) > em' % j )
content = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > p' % j )
part = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div:nth-child(3) > div > span:nth-child(2) > em' % j )
alc = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div:nth-child(3) > div > span:nth-child(3) > em' % j )
price = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div:nth-child(3) > div > span:nth-child(5) > em' % j )
material = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div:nth-child(3) > div > span:nth-child(6) > em' % j )
manufacturer = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div:nth-child(3) > div > span:nth-child(7) > em' % j )
addr = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div:nth-child(3) > div > span:nth-child(9) > em' % j )
store = soup.select('#content > div.list_wrap > ul > li:nth-child(%d) > div.info_area > div:nth-child(3) > div > span:nth-child(11) > em' % j )
# 가져온값 배열에 입력
if len(link)==0:
links.append(' ')
else:
for index, element in enumerate(link, j-1):
links.append(element.attrs['href'])
if len(title1)==0:
titles1.append(' ')
else:
for index, element in enumerate(title1, j-1):
titles1.append(element.text)
if len(title2)==0:
titles2.append(' ')
else:
for index, element in enumerate(title2, j-1):
titles2.append(element.text)
if len(content)==0:
contents.append(' ')
else:
for index, element in enumerate(content, j-1):
contents.append(element.text)
if len(part)==0:
parts.append(' ')
else:
for index, element in enumerate(part, j-1):
parts.append(element.text)
if len(alc)==0:
alcs.append(' ')
else:
for index, element in enumerate(alc, j-1):
alcs.append(element.text)
if len(price)==0:
prices.append(' ')
else:
for index, element in enumerate(price, j-1):
prices.append(element.text)
if len(material)==0:
materials.append(' ')
else:
for index, element in enumerate(material, j-1):
materials.append(element.text)
if len(manufacturer)==0:
manufacturers.append(' ')
else:
for index, element in enumerate(manufacturer, j-1):
manufacturers.append(element.text)
if len(addr)==0:
addrs.append(' ')
else:
for index, element in enumerate(addr, j-1):
addrs.append(element.text)
if len(store)==0:
stores.append(' ')
else:
for index, element in enumerate(store, j-1):
stores.append(element.text)
print("%d 페이지" % i)
# 엑셀 컬럼 지정
df = pd.DataFrame()
df['links'] = links
df['titles1'] = titles1
df['titles2'] = titles2
df['contents'] = contents
df['parts'] = parts
df['alcs'] = alcs
df['prices'] = prices
df['materials'] = materials
df['manufacturers'] = manufacturers
df['addrs'] = addrs
df['stores'] = stores
# 엑셀 익스포트
df.to_excel('./library_drink.xlsx', sheet_name='Sheet1')
- BeautifulSoup , pandas 라이브러리를 이용하여 크롤링을 진행하였음
- 진행 후 엑셀로 익스포트를 진행하여 데이터 리스트를 가져왔으며 해당 데이터를 가공하여 DB에 등록 하였음
1-2.결과물
2. DB 쿼리 생성 및 DB 데이터 밀어넣기
2-1. DB 쿼리 생성
- 엑셀 시트를 컬럼별로 정리하여 쿼리문을 생성하였음
- DB 툴을 이용하여 데이터를 밀어 넣은 뒤
- 서버에서 직접 mysql 명령어를 사용하여 백업을 진행, 기본 베이스가될 sql 파일을 생성함
'개인 포트폴리오 > 술렁술렁(전통주 플렛폼)' 카테고리의 다른 글
후기(그리고 보완리스트) (2) | 2023.10.14 |
---|---|
술렁술렁 프로젝트 - DB 구축, 백엔드 배포, 프론트 배포 (1) | 2023.10.13 |
술렁술렁 프로젝트 - 개인 백엔드 작업, 이미지 호출 API (0) | 2023.10.12 |
술렁술렁 프로젝트 - 개인 백엔드 작업, 전통주 정보 API (0) | 2023.10.12 |
술렁술렁 프로젝트 - 개인 백엔드 작업, 메인 검색 API (0) | 2023.10.12 |