본문 바로가기

Naver Search AD

Chapter4 - 데이터 크롤링

안녕하세요 개발자 정씨입니다.

지난시간에 계획한 알고리즘을 기반으로 프로그램을 구현하는 단계에 이르렀습니다. 그 중에서 오늘은 Naver 페이지 크롤링을 통해 현재 본인의 광고 위치를 확인하는 기능을 구현하도록 하겠습니다. 해당 기능은 추후에 금액 변경의 기능으로 확장될 예정입니다.

 

1. setting.py

  • 해당 프로젝트는 실질적인 기능을 수행하는 process.py와 사용자가 설정값을 변경 할 수 있는 setting.py로 나뉩니다.
  • 이번 포스팅에서 사용할 search_word 변수를 setting.py에 만들고 process.py에서 이를 import 해오겠습니다.
# setting.py

search_word = ""
# process.py

import setting

 

2. 데이터 크롤링

  • 실질적인 크롤링 기능 구현을 위해 저는 Requests와 BeautifulSoup라는 파이썬의 모듈을 사용할 계획입니다.
  • Requests는 웹페이지의 데이터(소스)를 불러오고, BeautifulSoup는 이를 html 형식으로 Parsing하는 역할을 합니다.
  • 아래와 같이 Requests와 BeautifulSoup를 선언하고 pip을 통해서 설치해줍니다.
#process.py

from bs4 import BeautifulSoup
import requests
# cmd

pip install requests
pip install bs4

 

 

  • 이를 기반으로 쇼핑검색-PC크롤링을 위해 작성한 코드는 아래와 같습니다.
#process.py

url = 'https://search.shopping.naver.com/search/all.nhn?&query={}'.format(setting.search_word)
req = requests.get(url)

html = req.text
soup = BeautifulSoup(html,'html.parser')
url  데이터를 가져올 경로입니다. 해당 경로로 접속해보시면, 네이버 쇼핑으로 접속되는 것을 확인 할 수 있습니다. 뒤에 '&query={}'.format(setting.search_word)' 부분은 검색어 입니다. 예를 들어 &query={}'.format(시트지)는 네이버 쇼핑에서 시트지를 검색한 것과 동일한 경로입니다. 이를 사용자가 자유롭게 변경할 수 있도록 setting.py의 변수로 설정해주었습니다.
req url 경로에 있는 데이터를 가져옵니다. 이때 데이터에는 소스코드 뿐만 아니라 헤더, 페이지 상태 등의 정보가 모두 포함 되어 있습니다.
html  url에서 가져온 데이터 중 소스 코드를 저장합니다.
soup  소스코드 데이터를 html형식으로 Parsing합니다. 

 

  • 이렇게 데이터를 가져왔다면, 원하는 데이터만 수집해보도록 하겠습니다.
  • 저희가 원하는 데이터는 쇼핑광고일 경우에는 제품명(제품의 고유번호), 파워링크일 경우에는 링크주소입니다. 
  • 아래는 네이버 쇼핑에서 시트지를 검색했을 때의 페이지 소스입니다.

 

  • 위를 보시면 (class)search_list basis안에 (class)goods_list가 있고 그 안에 (class)ad가 나열되어 있습니다.
  • 이중에서 저희가 원하는 제품명(제품의 고유번호)를 찾으면 됩니다.
  • 그래서 위에서 부터 차례로 접근하며, 맞지 않는다면 rank count를 올리고, 맞다면 해당 rank를 반환합니다.
  • 아래는 해당 내용을 구현한 코드입니다.
#process.py

url_list = soup.find(class_='search_list').find(class_='goods_list').find_all(class_='ad')

for i in url_list :
    if(setting.identify_word == i.get('data-nv-mid')) :
        return rank;
    else :
        rank += 1
find() 규칙에 해당되는 내용을 찾음
find_all() 규칙에 해당되는 내용을 모두 찾아 list 형식으로 저장
get() 속성값을 반환

 

이상으로 BeautifulSoup를 이용하여 naver 페이지를 크롤링 및 html 형식으로 파싱하여 현재 자신의 광고가 어떤 위치에 있는지 서칭하는 로직을 만들었습니다. 이와 같은 로직을 응용하여 포맷(PC 또는 모바일) 그리고 광고타입(쇼핑검색, 파워링크, 통합검색 등)에도 사용할 수 있는 코드를 작성하였습니다. 궁금하시다면 github를 참조하시기 바랍니다.

 

추가적으로 궁금하신 내용은 댓글 남겨놓아주시면 최대한 성심성의껏 답변드리겠습니다.

감사합니다.