상세 컨텐츠

본문 제목

[빅데이터 분석] 03 - 04. 웹 페이지 크롤링

[SW]/빅데이터 (2023) (완)

by 시원00 2023. 7. 19. 15:55

본문

728x90

정적 웹 페이지 크롤링

 

API가 없는 웹 페이지에서 크롤링 수행 방법

- HTML 구조 분석 필요: HTML Parsing

     BeautifulSoup lib. 사용

     pip install beautifulSoup4 설치

 

크롤링 허용 여부 확인

- 주소창에 '크롤링할 웹 사이트 주소/robots.txt' 입력

- 결과:

표시 허용 여부
User-agent: *
Allow: /
또는 
User-agent: *
Disallow:
모든 접근 허용
User-agent: *
Disallow: /
모든 접근 금지
User-agent: *
Disallow: /user/
특정 디렉토리만 접근 금지

 


project3. 할리스 매장 정보 크롤링

 

전체 코드

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


#[CODE 1]
def hollys_store(result):
    for page in range(1,54):
        Hollys_url = 'https://www.hollys.co.kr/store/korea/korStore2.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'):
            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])
    return result

#[CODE 0]
def main():
    result = []
    print('Hollys store crawling >>>>>>>')
    hollys_store(result)    #[CODE 1]
    hollys_tbl = pd.DataFrame(result, columns= ('store','sido-gu','address','phone'))
    hollys_tbl.to_csv('./hollys.csv', encoding='utf-8', mode='w', index=True)
    result.clear()

if __name__=='__main__':
    main()

 


동적 웹 페이지 크롤링

 

동적 웹 페이지란?

- 자바스크립트 함수를 호출하고 데이터를 처리하는 구조를 가진 웹 페이지

- 자바스크립트가 실행되어야만 크롤링할 데이터가 나타남

 

Selenium lib. 설치

- 웹 브라우저를 원격으로 조작하는 기능을 제공

- pip install selenium

 

WebDriver 모듈

- 웹 브라우저에 대한 원격 제어를 가능하게 함

- 자바스크립트 함수를 실행시키고 그 결과 데이터를 가져옴 

- 설치 링크: https://www.selenium.dev/downloads/ 

 


project4. 커피빈 매장 정보 크롤링

 

전체 코드

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

from selenium import webdriver

#[CODE1]
def CoffeeBean_store(result):
    CoffeeBean_URL = 'https://www.coffeebeankorea.com/store/store.asp'
    wd = webdriver.Chrome('chromedriver_mac64/chromedriver')
    for i in range(1,51):   # 지점 번호 1번~10번까지
        wd.get(CoffeeBean_URL)
        time.sleep(1)   #웹 페이지 연결할 동안 1초 대기
        try:
            wd.execute_script("storePop2(%d)" %i)
            time.sleep(1)   #스크립트 실행할 동안 1초 대기
            html = wd.page_source

            with open('testHtml.txt', 'w', encoding='utf8') as outfile:
                outfile.write(html)

            soupCB = BeautifulSoup(html, 'html.parser')
            store_name_h2 = soupCB.select("div.store_txt > h2")
            store_name = store_name_h2[0].string
            print(i, store_name)    #콘솔에 매장 이름 출력하기

            store_info = soupCB.select("div.store_txt > table.store_table > tbody > tr > td")
            store_address_list = list(store_info[2])
            store_address = store_address_list[0]
            store_phone = store_info[3].string
            result.append([i]+[store_name]+[store_address]+[store_phone])
        except:
            print(i, "fail")
            continue
    return

#[CODE 0]
def main():
    result = []
    print('CoffeeBean store crawling >>>>>>>>>>>>>>>>')
    CoffeeBean_store(result)    #[CODE1]

    CB_tbl = pd.DataFrame(result, columns = ('id','store','address','phone',))
    CB_tbl.to_csv('./CoffeeBean.csv', encoding = 'utf8', mode='w', index=True)

if __name__ == '__main__':
    main()

 

 

FIN.

728x90

관련글 더보기

댓글 영역