3. 정적 웹페이지 크롤링(22.07.06)
오늘은 BeautifulSoup 라이브러리를 통한 정적 웹피이지를 크롤링하는 작업을 할 것이다.
크롤링을 하기전에 크롤링여부 확인을 위해 '크롤링하고자하는주소/robots.txt' 를 통해서 크롤링을해도 되는지 확인해야한다. allow가 되있거나 robots.txt가 존재하지 않는 경우 크롤링을 해도 된다.
이번 글에서는 할리스커피 홈페이지에서 매장정보에 대한 크롤링 작업을 진행할 것이다.
from bs4 import BeautifulSoup
from tqdm import tqdm
import time
import urllib.request
import pandas as pd
우선 BeautifulSoup, urllib.request 라이브러리를 import 한다.(나머지는 편의를 위해 개인적으로 추가한 라이브러리들이다.)
def hollys_store(result):
for page in tqdm(range(1, 54)):# 지점 정보 페이지가 53페이지까지 있기 때문
time.sleep(0.1)
Hollys_url = 'https://www.hollys.co.kr/store/korea/korStore.do?pageNo-%d&sido=&gugun=&store=' % page
html = urllib.request.urlopen(Hollys_url)
soupHollys = BeautifulSoup(html, 'html.parser')
tag_tbody = soupHollys.find('tbody')
for store in tag_tbody.find_all('tr'):
if len(store) <= 3:
break
store_td = store.find_all('td')
store_name = store_td[1].string
store_sido = store_td[0].string
store_address = store_td[3].string
store_phone = store_td[5].string
result.append([store_name]+[store_sido]+[store_address]+[store_phone])
def main():
result = []
print("Hollys cafe Crawling >>>>>>>>>>>>>")
hollys_store(result)
hollys_tbl = pd.DataFrame(result, columns=('store', 'sido-gu', 'address', 'phone'))
hollys_tbl.to_csv("data/hollys.csv", encoding="cp949",mode='w', index=True)
del result[:]
if __name__ == '__main__':
main()
우선 크롤링을 잘 하기 위해서는 직접 크롤링하고자하는 웹페이지들 들어가서 페이지가 이동될 때 주소가 어떻게 바뀌는 지를 봐야한다. 할리스홈체이지에서 매장정보 페이지에 들어가보면 총 53페이지가 존재한다는 것을 볼 수 있다. 그리고 페이지가 이동 될 때마다 "https://www.hollys.co.kr/store/korea/korStore2.do?pageNo=53&sido=&gugun=&store=" 저렇게 페이지번호가 주소창에 넘어가게 된다.
코드를 분석해보자.
[hollysstore 함수]*
[02행]: 반복문을 통해 page인자를 1~53p 까지 돌려준다.
[04행] : urllib.request를 통해 url을 요청하고 응답받은 웹페이지를 저장
[05행]: BeautifulSoup객체를 생성
[06~15행]: 매장정보가 들어있는 tbody태그 안에서 tr태그 중 원하는 td태그들의 항목들만 추출하여 result에 저장.
[main 함수]
[04~06행]: 크롤링한 데이터를 csv에 저장.
크롤링하면 위처럼 데이터가 나오게 된다.
'데이터분석실습 > 데이터 과학 기반의 파이썬 빅데이터 분석' 카테고리의 다른 글
파이썬 빅데이터 분석 Day 5 (1) | 2023.10.26 |
---|---|
파이썬 빅데이터 분석 Day 4 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 2 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 1 (0) | 2023.10.26 |
파이썬 빅데이터 분석 Day 0 (0) | 2023.10.26 |