목표 : 웹 스크래핑을 통한 데이터 수집의 자동화
<웹 크롤러 vs 웹 스크래퍼>
- 웹 크롤러 : 웹 페이지의 내부 링크 및 페이지를 따라 인터넷을 체계적으로 탐색하여 콘텐츠를 검색
- 웹 스크래퍼 : 웹을 포함한 다양한 소스에서 특정 데이터를 추출하는 프로세스
<Web Scrapper for STEAM review data>
import packages
from bs4 import BeautifulSoup as bs
from selenium import webdriver
import time
from tqdm.notebook import trange
import pandas as pd
Data category
#분석하고자 하는 데이터 열(column)을 지정
#리뷰 작성 날짜
Date = []
#리뷰 내용
Content = []
#리뷰 유익성
Helpful = []
#추천 여부
Recommend = []
Scarapper Function
def Scrapping(p_num):
html = broswer.page_source
soup = bs(html, 'lxml')
page = "page"+str(p_num)
contents = soup.find("div", id=page).find_all("div", {"class" : "apphub_CardTextContent"})
for i in contents:
temp = str(i).find("</div>")
p = str(i)[temp+6:-6]
#------------------없애고 싶은 단어----------
token = ['\t', '\n', '<br/>', '<b>', '</b>']
for removeStr in token:
p = p.replace(removeStr, "")
Content.append(p)
dates = soup.find("div", {'id' : page}).find_all("div", {"class" : "date_posted"})
for i in dates:
d = str(i).replace('<div class="date_posted">Posted: ', '').replace('</div>', '')
Date.append(d)
helpfuls = soup.find("div", {'id': page}).find_all("div", class_="found_helpful")
for i in helpfuls:
h = str(i).replace('<div class="found_helpful">', '').lstrip()
len = h.find(' ')
Helpful.append(h[:len])
recommends = soup.find("div", {'id': page}).find_all("div", class_="title")
for i in recommends:
r = str(i).replace('<div class="title">', '').replace('</div>', '')
Recommend.append(r)
Chrome Drive → Load Web page
broswer = webdriver.Chrome("./chromedriver 2")
broswer.maximize_window()
#데이터를 수집하고자 하는 URL
url = "https://steamcommunity.com/app/1811260/reviews/?browsefilter=toprated&snr=1_5_100010_"
broswer.get(url)
Selenium을 활용하여 스크롤 자동화
# 현재 문서 높이를 가져와서 저장
prev_height = broswer.execute_script("return document.body.scrollHeight")
p_num = 0
#-----------스크롤 횟수-------------
final_pnum = 10
#------로딩을 기다리는 시간(초)----
sec = 5
# 반복 수행
for _ in trange(final_pnum):
# 스크롤 가장 아래로 내림
broswer.execute_script("window.scrollTo(0, document.body.scrollHeight)")
p_num = p_num + 1
# 페이지 로딩 대기
time.sleep(sec)
Scrapping(p_num)
# 현재 문서 높이를 가져와서 저장
curr_height = broswer.execute_script("return document.body.scrollHeight")
if curr_height == prev_height:
break
prev_height = curr_height
'<p class="coding">' 카테고리의 다른 글
한국은행 컴퓨터공학 2022 기출문제 풀이 (공부 중) (0) | 2023.09.06 |
---|---|
[SQL/ORACLE] ROWNUM 함수 (SQL의 TOP 함수) 특정 행까지만 출력 (0) | 2023.08.25 |