Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- TiL
- 파이썬 머신러닝 완벽 가이드
- 파이썬 철저입문
- 내일배움카드
- 스파르타코딩
- 티스토리챌린지
- 중회귀모형
- 미세먼지
- 파이썬
- SQL
- 텍스트 분석
- 실전 데이터 분석 프로젝트
- R
- 스파르타 코딩
- hackerrank
- 회귀분석
- 파이썬 완벽 가이드
- 스파르타
- 내일배움캠프
- 파이썬 머신러닝 완벽가이드
- wil
- 파이썬 철저 입문
- 프로젝트
- 프로그래머스
- harkerrank
- 내일배움
- MySQL
- Cluster
- 웹 스크랩핑
- 오블완
Archives
- Today
- Total
OkBublewrap
@코스메 한국 브랜드 화장품 데이터베이스 구축(3) 본문
1. 데이터 베이스 생성(brand, category, product)
더보기
import sqlite3
# SQLite 데이터베이스 연결 (없으면 생성됨)
conn = sqlite3.connect("cosme.db")
cursor = conn.cursor()
# # 기존 테이블 삭제 (있으면 삭제)
cursor.execute("DROP TABLE IF EXISTS product")
cursor.execute("DROP TABLE IF EXISTS category")
cursor.execute("DROP TABLE IF EXISTS brand")
cursor.execute("DROP TABLE IF EXISTS rank")
# products 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS product (
product_id INTEGER PRIMARY KEY, -- 기본 키 (PK)
brand_id INTEGER, -- 브랜드 ID (외래 키)
category_id INTEGER, -- 카테고리 ID (외래 키)
rating REAL, -- 평점 (소수점 가능)
review_cnt INTEGER, -- 리뷰 개수
price TEXT, -- 가격
update_date DATE, -- 업데이트 날짜
url TEXT, -- 제품 URL
FOREIGN KEY (brand_id) REFERENCES brand(brand_id),
FOREIGN KEY (category_id) REFERENCES category(category_id)
);
""")
# categories 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS category (
category_id INTEGER PRIMARY KEY, -- 기본 키 (PK)
category_name TEXT, -- 카테고리 이름 (일본어)
category_name_kr TEXT -- 카테고리 이름 (한국어)
);
""")
# brands 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS brand (
brand_id INTEGER PRIMARY KEY, -- 기본 키 (PK)
brand_name TEXT , -- 브랜드 이름 (일본어, 고유)
brand_name_kr TEXT , -- 브랜드 이름 (한국어)
brand_url TEXT -- 브랜드 URL (고유)
);
""")
# rank 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS rank (
rank_id INTEGER PRIMARY KEY, -- 기본 키 (PK)
product_id INTEGER, -- 제품 아이디 (FK)
ranking INTEGER, -- 순위 (한국어)
date DATE -- 업데이트 날짜
);
""")
# 변경 사항 저장 & 연결 종료
conn.commit()
conn.close()
ERD
2. category 테이블 작업
더보기
# 크롬 브라우저의 User-Agent 설정
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}
url = "https://www.cosme.net/category/#theme-items"
# HTTP 요청 보내기 (User-Agent 포함)
response = requests.get(url, headers=headers)
time.sleep(random.uniform(3,5))
# BeautifulSoup으로 HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')
# <div id="theme-items"> 안의 세부 항목 찾기
theme_items_div = soup.find("div", id="theme-items")
category_links = []
category_names = []
if theme_items_div:
theme_lists = theme_items_div.find_all("ul", class_="theme-product-list")
for ul in theme_lists:
for li in ul.find_all("li"):
a_tag = li.find("a")
if a_tag:
category_names.append(a_tag.text.strip()) # 카테고리명
category_links.append(a_tag["href"]) # 링크 URL
category_id = [extract_id(code) for code in category_links]
df = pd.DataFrame({
"category_id" : category_id,
"category_name" : category_names
})
df = df.drop_duplicates()
df.to_excel("category.xlsx", index=False)
번역 api를 찾을려다가 서비스 종료가 된 것 같아서, 엑셀 translate로 작업을 했다.
# 엑셀에서 transelate([셀], 'ja', 'ko')을 작업 후 불러오기
df = pd.read_excel("category.xlsx")
print(df.head())
# SQLite DB 연결 (파일로 저장되는 DB)
engine = create_engine('sqlite:///cosme.db')
# pandas DataFrame을 DB에 업로드
df.to_sql('category', con=engine, if_exists='replace', index=False)
3. 크롤링
4. brand 테이블 작업
5. 진행사항
- 2025-02-25 크롤링 코드 돌려보기
- 잘 쌓이는지 확인하고 매주 금요일 스케쥴러 사용하기
- 리뷰데이터, 상세데이터 어떻게 수집할지 고민
'Python > 프로젝트' 카테고리의 다른 글
@코스메 한국 브랜드 화장품 데이터베이스 구축(5) (0) | 2025.03.01 |
---|---|
@코스메 한국 브랜드 화장품 데이터베이스 구축(4) (0) | 2025.02.27 |
@코스메 한국 브랜드 화장품 데이터베이스 구축(2) (0) | 2025.02.24 |
@코스메 한국 브랜드 화장품 데이터베이스 구축(1) (3) | 2025.02.23 |
Discord 미세먼지 Msg (0) | 2023.04.21 |