cs/크롤링

[크롤링] 할리스 매장 위치 정보 크롤링 해보기 (pandas / del[:])

신_이나 2023. 3. 8. 20:15

 

할리스의 매장 정보를 크롤링하여 워드에 작성해보자!

 

https://www.hollys.co.kr/store/korea/korStore2.do

 

할리스

HOLLYS

www.hollys.co.kr

 

 

 

 

 

할리스의 매장찾기 페이지 소스를 살펴보니 위와 같은 코드로 정리하고 있었다.

tr 로 매장을 나누어 그 안에 지역, 매장명, 현황, 주소, 매장 서비스, 전화번호로 나누어 코드를 작성하였다.

 

 

실제로 청주율량현대점과 연세대학교원주장례식장점처럼 실제로 나누고 있었다.

 

 

 

<코드>

from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
import datetime

def hollys(result):
    html = urlopen('https://www.hollys.co.kr/store/korea/korStore2.do')
    bs = BeautifulSoup(html, 'html.parser')
    tag_tbody = bs.find('tbody')
    for store in tag_tbody.find_all('tr'):

        store_td = store.findAll('td')
        store_name = store_td[1].string
        store_sido = store_td[0].string
        store_now = store_td[2].string
        store_address = store_td[3].string
        store_phone = store_td[5].string

        result.append([store_name] + [store_sido] + [store_now] + [store_address] + [store_phone])

def main():
    result = []
    print('Hollys store crawling >>>>>>>>>>>>>>>>>')
    hollys(result)
    hollys_tbl = pd.DataFrame(result, columns= ('store', 'sido-gu', 'now', 'address', 'phone'))
    hollys_tbl.to_csv('/Users/shinjiwon/Desktop/크롤링/hollys.csv', encoding= 'cp949', mode = 'w', index = True)
    del result[:]

 

최종 코드는 다음과 같다. pandas 를 처음 써보아서 다른 블로그를 참고하여 작성하였다.

main 함수에 있는 쪽은 pandas 작성에 관한 내용이다.

1) 그 중에서 del 은 삭제하는 함수다. del result[:] 는 result 배열 안에 있는 내용을 모두 삭제한다는 이야기다. 첫 번째만 삭제하고 싶다면 result[0] 을 뒤에 두개를 삭제하고 싶다면 result[2:] 를 사용하며 된다.

2) 또한 전까지는 항상 findAll 을 사용하다가 위에 코드는 find_all 을 사용하였는데 둘은 같은 것이고 버전차이라고만 보면 된다.

 

위 코드에 대한 결과

 

 

이때 할리스의 장소 정보는 한 페이지에만 있는 것이 아니란 총 52 페이지에 걸쳐 있기 떄문에 이를 반영하면 range 를 사용하여 범위를 설정하면 된다.

 

def hollys(result):
#여기서부터 추가
    
    for page in range(1,52) :
        url = 'https://www.hollys.co.kr/store/korea/korStore2.do?pageNo=%d&sido=&gugun=&store=' %page
        html = urlopen(url)
        
#
        bs = BeautifulSoup(html, 'html.parser')
        tag_tbody = bs.find('tbody')
        for store in tag_tbody.find_all('tr'):

            store_td = store.findAll('td')
            store_name = store_td[1].string
            store_sido = store_td[0].string
            store_now = store_td[2].string
            store_address = store_td[3].string
            store_phone = store_td[5].string

            result.append([store_name] + [store_sido] + [store_now] + [store_address] + [store_phone])

 

 

 

 

 

참고한 사이트