정적 웹 페이지 크롤링
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.
[빅데이터 분석] 07. 텍스트 빈도 분석 (0) | 2023.07.25 |
---|---|
[빅데이터 분석] 06. 통계 분석II (1) | 2023.07.25 |
[빅데이터 분석] 05. 통계 분석 (1) | 2023.07.24 |
[빅데이터 분석] 01 - 02. 파이썬 크롤링 (API 이용) (1) | 2023.05.11 |
[빅데이터 분석] 00. 4차 산업혁명 기술과 데이터 과학 기반의 빅데이터 분석 (1) | 2023.05.03 |
댓글 영역