학교 다닐 적 파이썬을 대충 사용해본 기억이 있다.
무슨 프로젝트인지 기억은 나지 않지만 장고를 사용하여 서버를 만들려고 했다. 하지만 ec2에서 nginx와 장고를 연결하는 것은 쉬운 작업이 아니였다. 취업을 위해 빨리 프로젝트를 찍어내야했던 상황이라 더 이상 붙들고 있을 수 없어 평소에 사용하던 라라벨로 진행했다.
기억나는 건 들여쓰기를 매우 철저히 지켜줘야하는 언어라는 것 뿐이다.
회사에서 몇 천개나 되는 편의점 1+1 할인 품목을 수동으로 입력해 넣어야하는 상황이라는 것을 들었고 크롤링으로 가져온 데이터를 바로 데이터베이스에 입력하면 그러한 수고를 덜 수 있을 것이라 확신했다.
그렇게 오늘 오전에 파이썬과 크롤링에 대해 가까워지는 시간을 가졌다.
너무 지원해주는 기능이 많았기에 공부할 것도 없고 로직만 생각해서 슥슥 만들어 보니 결과물이 나왔다.
대충 결과물은 만들어 냈는데 코드의 효율성 따위는 생각하지 않고 일단 만들어봤다.
# pip install requests
# pip install beautifulsoup4
import requests
from bs4 import BeautifulSoup
webpage = requests.get("https://pyony.com/search/")
soup = BeautifulSoup(webpage.content, "html.parser")
# 마지막 페이지 추출
page = soup.findAll("a", {"class":"page-link"})
last_page = page[len(page)-1].get('href')
_last_page = last_page.replace("?page=","")
print("last page", _last_page)
# 페이지별 크롤링
for x in range(1, int(_last_page)):
webpage = requests.get("https://pyony.com/search/?page="+str(x))
soup = BeautifulSoup(webpage.content, "html.parser")
obj_result = []
for j in range(0,20):
obj = soup.findAll("div",{"class":"card-body"})[j].get_text().replace(" ", "").replace("\n", "|").split("|")
_obj = []
i = 0
for val in obj:
if(val):
if(i < 4):
_obj.append(val)
i = i+1
obj_result.append(_obj)
img = soup.findAll("img",{"class":"prod_img"})
for inx, val in enumerate(img):
img[inx] = val.get('src')
for inx, val in enumerate(obj_result):
obj_result[inx].append(img[inx])
print(obj_result)
이제 이 코드에서 데이터베이스 처리 코드를 넣고 crontab으로 매월 1일 새벽에 돌아가도록 처리만 해주면 기능은 완성될 것같다.
#추후 변경해야할 사항
지금은 모든 편의점 할인 품목이 정리되어 있는 펴늬 라는 사이트에서 크롤링해오지만 만약에 저 페이지가 ui적으로 변경을 준다면 내 코드는 오작동을 일으킬 것이기 때문에 편의점 홈페이지에서 따로 다 크롤링해오도록 설계하자.
BeautifulSoup 지원 함수를 더 찾아보고 기존 웹페이지의 형태가 조금 변경되어도 에러가 발생하지 않도록 구현하자.