Python

Python 실습 - 핫딜 크롤링 해보기

UserDonghu 2023. 9. 24. 17:11

원래 목표는 핫딜 게시판을 크롤링하는 py파일을 만들어서 그걸 매 시간 정각마다 실행되도록 외부 서버를 이용한 후, 만약 새 글이 올라왔으면 나에게 알림을 보내는 것이었지만 아직 그렇게 까지 하기에는 실력이 부족하기도하고 귀찮기도해서 일단 크롤링만 해보았다.

 

예전에는 셀레니움으로 했었는데 이번엔 BeautifulSoup으로 해봄.

 

모듈 import

from bs4 import BeautifulSoup
import requests
import re

 

내가 검색하고싶은 키워드 정하고 url입력한 후, 잘 응답했는지 확인

난 애플워치 스테인리스를 싸게 사고싶으니까 애플워치로 함

mykeyword = '애플워치' # 검색하고싶은 키워드
res = requests.get(f'https://www.fmkorea.com/search.php?mid=hotdeal&category=1196845148&listStyle=webzine&search_keyword={mykeyword}&search_target=title') # 가전제품 카테고리에서 제목 검색
res.raise_for_status() # 200(정상)이 아니면 오류 발생

 

가져온 res를 파싱하고 내 배열 생성후 셀렉터로 상품 컨테이너 찾기

html = res.text
soup = BeautifulSoup(html, 'html.parser')
myproductlist = []
productlist = soup.select('#content>.content_dummy>div>div>div>ul>li')

 

상품컨테이너에서 제목과 가격 찾아서 내 배열에 넣기

제목에 댓글 갯수나 빈칸같은게 많아서 정규표현식으로 좀 다듬었음.

for container in productlist:
    title = container.select('.title a')[0].text.strip()
    title = re.sub(r'\t|\xa0|\[\d+\]', '', title)

    price = container.select('.hotdeal_info>span')[1].select('.strong')[0].text

    myproductlist.append([title, price])

print(myproductlist)

 

결과는 이런 배열로 나옴

 

[['애플워치8 스테인리스 45mm', '599,000원'], ['애플워치8 41mm GPS 미드나이트 알루미늄 미드나이트 스포츠밴드', '419,430원'], ['Apple 애플워치 8 알루미늄+스포츠밴드 (연결성,사이즈,색상 선택)', '463,000원'], ['애플워치8 Gps+ Cellular 실버 스테인리스 45mm', '769,680원'], ['애플워치8 미드나잇41mm 셀룰러', '498,280원'], ['Apple 애플워치 Ultra 트레일 루프 49mm GPS+Cellular 티타늄 케이스', '818,940원'], ['애플워치 SE 1세대 나이키 에디션 40mm', '228,400원'], ['Apple 애플워치 Ultra 알파인 루프 49mm GPS+Cellular 티타늄 케이스', '894,660원'], ['애플워치8 gps 41mm / 45mm', '399,900원'], ['애플워치 울트라 트레일 루프 S/M 49mm GPS+Cellular', '898,090원'], ['애플워치8 GPS 45mm 실버 (495,320원)', '495,320원'], ['갤럭시워치,애플워치(스트랩,케이스)~', '1,900원'], ['애플워치8 41mm GPS 미드나이트 알루미늄 미드나이트 스포츠밴드', '448,200원'], ['애플워치8 GPS 45mm (499,410원) // 41mm (459,420원)', '459,420원'], ['애플워치8 GPS 45mm (50.9만원) / 41mm (46.9만원)', '509,000원'], ['Apple 2022 애플워치 SE 2세대 알루미늄 케이스', '232,910원'], ['버바팀 접지형4in1 애플워치 스탠드 무선충전기', '28,800원'], ['Apple 2022 애플워치 SE 2세대 알루미늄 케이스', '331,380원'], ['(BC,롯,하) 애플워치8 GPS 미드나이트 41mm', '463,190원'], ['애플워치 울트라 49mm BC 하나', '886,710원']]

 

 

나중에 자동화해서 디스코드 봇을 만들어보면 재밌겠다. 굿