1 분 소요


Selenium

  • 동적 웹 스크래핑
    BeautifulSoup만으로는 직접적인 주소가 노출되지 않은 자바스크립트로 이뤄진 페이지의 트래킹이 불가능하다.
    Selenium는 자바스크립트를 실행할 수 있다.

Selenium Web Driver for chrome

커피빈 매장 찾기 페이지 분석

In [1]:
# !pip install selenium
In [2]:
from selenium import webdriver
from bs4 import BeautifulSoup
import time
In [3]:
# !pip install webdriver_manager
In [4]:
# from webdriver_manager.chrome import ChromeDriverManager
# from selenium.webdriver.chrome.service import Service

# wd = webdriver.Chrome(service=Service(ChromeDriverManager().install())) # chrome버전에 맞게 알아서 chromedriver를 실행
    
# wd.get('https://www.coffeebeankorea.com/store/store.asp')
# time.sleep(1)
# wd.execute_script("storePop2('1')")
# time.sleep(1)
# html = wd.page_source

# soupCB = BeautifulSoup(html, 'html.parser')
# store_name = soupCB.select('div.store_txt>h2')[0].text
# store_name

# wd.quit()
In [5]:
wd = webdriver.Chrome('chromedriver109.exe')

for store_num in range(50):
    try:
        wd.get('https://www.coffeebeankorea.com/store/store.asp')
        time.sleep(1)
        wd.execute_script(f"storePop2('{store_num}')")
        time.sleep(1)
        html = wd.page_source

        soupCB = BeautifulSoup(html, 'html.parser')
        store_name = soupCB.select('div.store_txt>h2')[0].text
        store_info = soupCB.select("tbody>tr>td")
        store_address = store_info[2].text
        store_tel = store_info[3].text

        print(store_num, store_name, store_address, store_tel, sep='/')
    except IndexError:
        continue
        
wd.quit()
Out [5]:
C:\Users\user\AppData\Local\Temp\ipykernel_13960\712883531.py:1: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  wd = webdriver.Chrome('chromedriver109.exe')

1/학동역 DT점/서울시 강남구 학동로 211 1층  /02-3444-9973
3/차병원점/서울시 강남구 논현로 566 강남차병원1층  /02-538-7615
6/강남대로점/서울시 서초구 강남대로 369 1층  /02-588-5778
11/강남에스점/서울시 서초구 서초 1306-3호  /02-593-5095
12/청담에스점/서울시 강남구 압구정로 461 네이처포엠빌딩B108,109호  /02-548-6052
13/신사점/서울시 강남구 도산대로 126  /02-548-2741
14/압구정역점/서울시 강남구 논현로 842 압구정빌딩1층  /02-544-6823
15/역삼점/서울시 강남구 논현로 512  지상1,2층  /02-569-8051
16/양재스포타임점/서울시 서초구 강남대로 213 24호 지하1층  /02-578-6833
17/청담성당점/서울시 강남구 삼성로 716 LEE76빌딩2층  /02-542-2053
18/영동점/서울 서초구 반포동 736-17 P빌딩 2층  /02-3443-2096
19/도곡점/서울시 강남구 언주로 30길 10,112 현대비젼21 112호  /02-572-2781
20/영동고앞점/서울시 강남구 선릉로 749 1,2층  /02-544-3794
25/압구정시티점/서울시 강남구 도산대로49길 13 1층 17,18호  /02-543-5922
26/압구정로데오점/서울시 강남구 선릉로 157길 12 석전빌딩 1~4층  /02-3445-5093
27/서초우성점/서울시 서초구 강남대로 51길 1 511 TOWER  1층  /02-582-0158
28/논현팍스타워점/서울시 강남구 논현 231-13호 팍스타워지하1층  /02-513-3870
29/삼성오크우드점/서울 강남구 영동대로 513 컨벤션별관A동 지하 2층  /02-3466-8507
30/트레이드타워점/서울시 강남구 영동대로 511 트레이드타워 지하1층  /02-6002-6470
31/삼성봉은사거리점/서울시 강남구 영동대로 607 1,2층  /02-3443-5618
34/반포엘루체점/서울시 서초구 신반포로 23 1141호 엘루체백화점내1층1013~1015호  /02-3477-5571
35/잠실신천점/서울시 송파구 석촌호수로 118 1층  /02-416-9520
36/서초지파이브점/서울시 서초구 서초동 1685-8호 101~2호,113~4호,121호  /02-3477-5580
38/논현동수면센터점/서울시 강남구 논현로 717 1층  /02-3443-5575
41/삼성전자강남사옥점/서울시 서초구 서초대로74길 11 지하2층  /02-2055-1142
44/삼성생명강남사옥점/서울시 서초구 서초대로74길 4 삼성생명보험서초타워내지하1층  /02-581-5562
45/방배카페골목점/서울특별시 서초구 방배중앙로 187  /02-592-7794
46/역삼포스틸타워뒷점/서울시 강남구 테헤란로 20길 10 쓰리엠타워1층  /02-554-9962
47/테헤란로하이닉스뒷점/서울시 강남구 테헤란로 70길 12 1층  /02-538-9927
49/삼성봉은사로점/서울시 강남구 봉은사로 628 엘슨빌딩1층  /02-538-4523

네이버 뉴스 스크래핑

In [6]:
import requests
from bs4 import BeautifulSoup

url = 'https://news.naver.com/main/list.naver?mode=LPOD&mid=sec&sid1=001&sid2=140&oid=001&isYeonhapFlash=Y'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
# https://www.whatsmyua.info/ 에서 확인 가능
# Chrome: F12 -> Console> navigator.userAgent 에서 확인 가능

res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.content, 'html.parser')

추가예정

태그: ,

카테고리:

업데이트:

댓글남기기