JX405기_비트/mongoDB

Day18-1 동적 웹페이지 크롤링

_하루살이_ 2023. 2. 8. 13:47

selenium , webdriver_manager 설치하기

!pip install selenium
!pip install webdriver_manager

필요한 부분 import

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import time
import re

크롤링할 부분 설정하기 

dining_url = "https://m.diningcode.com/list.dc"
chrome_options = webdriver.ChromeOptions()
wd = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
wd.get(dining_url)
time.sleep(1)
html = wd.page_source
soup = BeautifulSoup(html, 'html.parser') 
stores = soup.select('div.InfoHeader>h2') # 리스트 항목중 h2 태그들 추출
scores = soup.select('div.Rate>p.Score') # 리스트 항목중 p 태그의 클래스가 Score인 것들을 추출
userScores = soup.select('div.Rate>p.UserScore') # 리스트 항목중 p 태그의 클래스가 UserScore인 것들을 추출

list로 받아와서 추출하기

store_list = list()
for index, store in enumerate(stores) :
    store_dict = dict()
    store_dict["store_name"] = re.sub(r'[^\uAC00-\uD7A3\s]',"",store.text) #한글만 추출
    store_dict["score"] = scores[index].select_one('span').text
    userScore = re.sub('<p.*?>.*?/>|</p>', "", str(userScores[index]))
    print('userScore', userScore)
    store_dict["userScore"] = re.sub('\(\w*\)',"",str(userScore)).strip()
    scorer = re.findall('\(([^)]+)',userScore)
    store_dict["scorer"] = scorer[0]
    store_list.append(store_dict)

DB에 저장하기

import pymongo

conn=pymongo.MongoClient()
db = conn.bitDB
db.dining.insert_many(store_list)