본문 바로가기
Python/BeautifulSoup

[크롤링] 파이썬으로 간단하게 크롤링하기7. (기존 엑셀 파일 OR 새로운 시트에 저장하는 방법)

by 미눅스[멘토] 2024. 10. 11.
728x90

 

기존 엑셀 파일에 이어서 저장하는 법

첫 페이지 1페이지

# step 1 : 새로운 엑셀 파일에 저장하기
import requests
from bs4 import BeautifulSoup
import pandas as pd

data = []
for i in range(1, 2):
    response = requests.get(f"https://startcoding.pythonanywhere.com/basic?page={i}")
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.select(".product")
    for item in items:
        category = item.select_one(".product-category").text
        name = item.select_one(".product-name").text
        link = item.select_one(".product-name > a").attrs['href']
        price = item.select_one(".product-price").text.split('원')[0].replace(',','')
        print(category, name, link,price)
        data.append([category,name,link,price])
# 데이터 프레임 만들기
df = pd.DataFrame(data,columns=["카테고리","상품명","상세페이지링크","가격"])

# 엑셀 저장
df.to_excel('result.xlsx', index=False)

# 자동생성 인덱스 번호 제거
#df.to_excel('result.xlsx', index=False)

 

두 번째 페이지 2페이지

*1페이지 뒤에 2페이지 데이타 엑셀파일 합치기

# step 2 : 기존 엑셀 파일에 추가해서 저장하기
import requests
from bs4 import BeautifulSoup
import pandas as pd

data = []
for i in range(2, 3):
    response = requests.get(f"https://startcoding.pythonanywhere.com/basic?page={i}")
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.select(".product")
    for item in items:
        category = item.select_one(".product-category").text
        name = item.select_one(".product-name").text
        link = item.select_one(".product-name > a").attrs['href']
        price = item.select_one(".product-price").text.split('원')[0].replace(',','')
        print(category, name, link,price)
        data.append([category,name,link,price])
# 데이터 프레임 만들기
df = pd.DataFrame(data,columns=["카테고리","상품명","상세페이지링크","가격"])

# 기존 엑셀 파일 불러오기
existing_df = pd.read_excel('result.xlsx')

#기존 데이터프레임에 새 데이터 추가
#ignore_index 인덱스는 무시하고 합쳐라
update_df = pd.concat([existing_df,df], ignore_index=True)

# 엑셀 저장
update_df.to_excel('result.xlsx', index=False)

# 자동생성 인덱스 번호 제거
#df.to_excel('result.xlsx', index=False)

 

더 알고 싶다면 pandas 데이터 분석파트 공부하셈

 

 

 

새로운 시트에 엑셀 파일에 저장하기

세 번째 페이지 3페이지

# step 3 : 새로운 시트에 저장하기
import requests
from bs4 import BeautifulSoup
import pandas as pd

data = []
for i in range(3, 4):
    response = requests.get(f"https://startcoding.pythonanywhere.com/basic?page={i}")
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.select(".product")
    for item in items:
        category = item.select_one(".product-category").text
        name = item.select_one(".product-name").text
        link = item.select_one(".product-name > a").attrs['href']
        price = item.select_one(".product-price").text.split('원')[0].replace(',','')
        print(category, name, link,price)
        data.append([category,name,link,price])
# 데이터 프레임 만들기
df = pd.DataFrame(data,columns=["카테고리","상품명","상세페이지링크","가격"])

# 'ExcelWriter' <- 판다스에서 특정 라이브러리의 기능을 가져다 쓰기 위해 사용하는 녀석
# 'with' <= 파일을 열었을때 파일객체를 자동으로 관리해주는 구문 (ex 파일을 열고나서 닫아야하는데 with가 자동으로 해줌)
# 'mode='a' <= 기존 엑셀파일을 추가모드로 연다
# 'engine='openpyxl' <= openpyxl라이브러리의 도움을 받아서 ExcelWriter을 만들겠다는 뭐 그런 뜻
# 'ExcelWriter' 를 사용하여 기존 엑셀 파일 열기
with pd.ExcelWriter('result.xlsx', mode='a', engine='openpyxl') as writer:
    #새로운 시트에 데이터 저장
    df.to_excel(writer, sheet_name='휴대폰', index=False)

실행후 엑셀 열어보면