4. 동적 웹페이지 크롤링(22.07.07)
이번시간에는 동적 웹페이지를 크롤링 해볼 것이다. 우선 간단하게 정적 크롤링과 동적 크롤링을 비교해보자
정적크롤링은 말 그대로 정적인 데이터를 수집하는 방법을 말한다.
페이지 내에서 원하는 정보가 모두 드러나 있는 것을 정적 데이터라고 말한다.
동적크롤링은 동적인 데이터를 수집하는 방법으로입력, 클릭, 로그인 등과 같이 페이지 이동을 통해 얻을 수 있는 데이터를 말한다. 정적데이터 크롤링 수집보다 속도가 느리지만 더 많은 정보를 수집할 수 있다.
동적 크롤링을 하기위해서는 우선 selenium이라는 라이브러리가 필요하다. 이 selenium은 웹 브라우저를 원격으로 조작하는 기능을 제공한다. 우선 selenium과 웹브라우저에 적용될 수 있도록 크롬 드라이버를 설치한다.
오늘은 커피빈 홈페이지에 들어가서 매장정보들을 크롤링 할 것이다. 커피빈 홈페이지에서 상단의 store에서 매장찾기를 들어가보면 매장정보에 대한 리스트들이 나오는데 정적웹페이지 크롤링 때 처럼 html을 열어보면 매장정보에 대한 코드가 없다. 다만 매장정보 리스트에서 자세히보기를 누르려하면 좌측하단에 javascript:storepop() 가 뜬다. 이후 클릭을 하면 팝업창이 열리고 매장 정보가 나온다. 따라서 우리는 일일이 클릭을 해가며 팝업창의 html을 뜯어서 거기서 매장정보를 크롤링해야한다. .
from bs4 import BeautifulSoup
import requests
import pandas as pd
import datetime
from selenium import webdriver
import time
path = './WebDriver/chromedriver.exe'
driver = webdriver.Chrome(path)
url = 'https://www.coffeebeankorea.com/store/store.asp'
def coffeebean_store(result):
for i in range(1, 250):
driver.get(url)
time.sleep(1)#웹 페이지 연결한 동안 1초 대기try:
driver.execute_script('storePop2(%d)' % i)
time.sleep(1)
source = driver.page_source
soupCB = BeautifulSoup(source,'lxml')
#매점명
store_name_h2 = soupCB.select_one('div.store_txt > h2').text
#매점 주소
store_info_add = soupCB.select_one('div.store_txt>table.store_table>tbody>tr:nth-of-type(3)>td')
store_address = store_info_add.text
#매점 전화번호
store_info_phone = soupCB.select_one('div.store_txt>table.store_table>tbody>tr:nth-of-type(4)>td')
store_phone = store_info_phone.text
#result에 매점정보 저장
result.append([store_name_h2] + [store_address] + [store_phone])
except:
continue
def main():
result = []
coffeebean_store(result)
cb_tbl = pd.DataFrame(result, columns=['store','address','phone'])
cb_tbl.to_csv('CoffeeBean.csv', encoding='cp949', index = True )
if __name__ == '__main__':
main()
[coffeebeanstore 함수]*
[01행]: 매장의 갯수가 총 250개 이므로 반복문 설정
[02행]: 매장정보페이지 url에 연결
[03행]: selenium은 직접 웹브라우저를 조작하므로 사이트에 연결될 시간을 제공
[05~18행]: 정적웹페이지 크롤링이랑 동일하게 beautiful soup을 통해서 매장정보가 들어있는 태그들에서 정보를 뽑아 result에 저장
'데이터분석실습 > 데이터 과학 기반의 파이썬 빅데이터 분석' 카테고리의 다른 글
파이썬 빅데이터 분석 Day 6 (0) | 2023.10.26 |
---|---|
파이썬 빅데이터 분석 Day 5 (1) | 2023.10.26 |
파이썬 빅데이터 분석 Day 3 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 2 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 1 (0) | 2023.10.26 |