빅데이터 김교수의 "AI노마드연구소" AI로 열어가는 노마드 세상!

빅데이터 김교수의 "AI노마드연구소" AI로 열어가는 노마드 세상입니다. AI 코딩작성, SNS 분석, AI업무자동화 컨설팅 0507-1419-0222

자세히보기

교육/파이썬빅데이터분석교육

파이썬 동적 크룰링 실습_커피빈사이트 활용

빅데이터 김교수 2022. 7. 4. 19:33

파이썬에서 크룰링은 정적과 동적크룰링으로 나눠집니다. 그중 동적 크룰링은 자바스크립트로  콘텐츠가 HTML(홈페이지)에 나타나지 않는 페이지를 대상으로 합니다. 

 

  이를 위해서는 다음과 같은 환경설정이 필요로 합니다. 

 

1. 파이썬 동적크룰링 환경설정하기

  우선 필요한 라이브러리를 설치합니다.(설명은 코랩(Colab) 환경을 기준)

  필요한 라이브러리는 request, BeautifulSoup, Selenium이 필요합니다. 특히, 동적크룰링에서는 selenium을 통해 크롬브라우즈를 활용할 수 있습니다. 

 

!pip install selenium # 셀레늄 라이브러리 설치
!apt-get upgrade  # apt 설치 명령 업그레이드
!apt install chromium-chromedriver # 크롬 가상 드라이브 설치(코랩)
 
 
 

2. 파이썬 라이브러리 설정하기

  위에서 말씀드린 여러 라이브러리를 추가하여 설정합니다. 

from selenium import webdriver
from bs4 import BeautifulSoup as bs
import urllib.request #  URL을 불러 올때 사용
import datetime
import time
import pandas as pd

#크롬 드라이브 속성
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless'#내부 창을 띄울 수 없으므로 설정
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

wd = webdriver.Chrome('chromedriver', chrome_options=chrome_options)
                 #('c:/chromdriver.exe')

3. 메인로직부분- 메인함수와 URL에서 콘텐츠를 가져오는 부분 

  메인 로직은 크게 메인함수(코드 0)와 크룰링할 대상 URL을 짜르는(파씽;코드 1) 부분으로 나눠집니다. 

 

#코드 1 : 파싱함수
def CB_store(result):
   
   for i in range(15):
     wd.get(CB_store_url)
     # html > 파씽.....
     try:
       wd.execute_script("storePop2(%d)"%i)
       time.sleep(1)
       html = wd.page_source
      #  print(html)
       soupCB = bs(html, 'html.parser')
       store_name = soupCB.select('div.store_txt > h2'# 공백처리 필요
       print(store_name)
       store_t_name = store_name[0].string
      #  print(store_name) # 지점명 확인....
       store_info =  soupCB.select('div.store_txt > table.store_table > tbody > tr > td'# 모든 정보 확인
      #  print(store_info)
       store_address = store_info[2].text # "주소"
       store_tel = store_info[3].string  # 전화번호... string
      #  print(store_tel)
       result.append([store_t_name]+[store_address]+[store_tel])
     except:
       continue

  #  result.append(     )
   return

# 코드 0 : 메인함수
#  - 파싱함수호출 + 엑셀로 저장
def main():
   result =[] # 메모리 
   CB_store(result)
   # 엑셀 저장
   CB_csv =pd.DataFrame(result, columns=('매장명''주소''전화번호'))
   CB_csv.to_csv("커피빈.csv", encoding='utf8', mode='w', index=True)

if __name__ =='__main__':
  main()