정적 웹페이지 vs 동적 웹페이지
정적 웹페이지
- 서버에 미리 저장된 파일(HTML, Javascript 등)이 그대로 전달되는 웹페이지
- Client가 요청하면 이 페이지를 그대로 전송(응답)
- 누가, 언제 접속해도 동일한 내용 보여줌
(서버에 저장된 데이터가 변경되지 않는다는 가정하에) - ⇒ 동일한 페이지 보여줌
동적 웹페이지
- 서버에 있는 데이터를 스크립트에 의해 가공하여 전달하는 웹페이지
- Client의 요청을 해석하여 데이터를 가공하여 전송(응답)
- 누가, 언제 접속하는가에 따라 다른 내용 보여줌
- ⇒ 보여지는 화면이 계속 바뀜
Selenium 활용
동적 웹 페이지는 정적 웹 페이지를 scrap하는 방식으로는 불가능
→ 동적 웹 페이지를 정적 웹 페이지를 scrap하는 방식으로 하면 내용들이 많이 누락됨
페이지 소스를 검색해서는 찾을 수 없는 html코드들이 동적 웹 페이지 코드들을 가져오기 위해서는 별도의 도구 필요
⇒ Selenium
예시 웹 페이지| https://www.livesport.com/kr/team/tottenham/UDg08Ohm/
Jupyter notebook 실행하고, selenium 불러오기
from selenium import webdriver
from bs4 import BeautifulSoup
# Webdriver 클래스의 객체인 driver 생성
# 경로에 자신이 저장한 드라이버 위치 적기
driver = webdriver.Chrome('C:\chromedriver_win32\chromedriver.exe')
# scraping하려는 웹페이지 주소를 get()에 전달
driver.get('https://www.livesport.com/kr/team/tottenham/UDg08Ohm/')
# driver의 page_source 속성에서 문자열 형식의 html 파일내용 확인
page = driver.page_source
# driver로 불러온 웹 페이지에서 BeautifulSoup을 활용하여 scraping
bs_obj = BeautifulSoup(page, 'html.parser')
# <div>태그의 class 속성 값이 ‘formIcon formIcon--wo’인 부분 추출
results_win1 = bs_obj.find_all('div', {'class':'formIcon formIcon--wo'}) ## 연장전 승리
results_win2 = bs_obj.find_all('div', {'class':'formIcon formIcon--w'})
results_los1 = bs_obj.find_all('div', {'class':'formIcon formIcon--lo'}) ## 연장전 패배
results_los2 = bs_obj.find_all('div', {'class':'formIcon formIcon--l'})
API 활용
API; Application Programming Interface
- 프로그램 간 데이터를 주고 받기 위한 방법
- 레스토랑에서 점원과 같은 역할 수행
- 점원: 손님에게 메뉴를 요청받고 이를 요리사에게 요청 → 요리사의 결과물 전달
- API: 프로그램에게 데이터를 요청받고 이를 타 프로그램에 요청 → 데이터 전달
Open API
누구나 무료로 사용 가능하도록 공개된 API
Open API를 배포하여 자사 서비스를 활용한 영역 확대 → 자사의 영향력 높이기 가능
예시 웹 페이지| 공공데이터포털 (data.go.kr)
from bs4 import BeautifulSoup
from urllib.request import urlopen
# 검색 조건에 맞게 URL 생성하도록 코드 작성
endpoint = 'https://api.odcloud.kr/api/RealEstateTradingSvc/v1/getRealEstateTradingCount'
service_key = #개인 service_key 입력
page = 1
perpage = 10
start_month = '202101'
end_month = '202102'
region = '11290'
trading_type='05'
cond1 = f'cond%5BRESEARCH_DATE%3A%3ALT%5D={end_month}'
cond2 = f'cond%5BRESEARCH_DATE%3A%3AGTE%5D={start_month}&'
cond3 = f'cond%5BREGION_CD%3A%3AEQ%5D={region}'
cond4 = f'cond%5BDEAL_OBJ%3A%3AEQ%5D={trading_type}'
url = f'{endpoint}?page={page}&perPage={perpage}&{cond1}&{cond2}&{cond3}&{cond4}&serviceKey={service_key}'
# HTML 문서 scraping
html = urlopen(url)
bs_obj = BeautifulSoup(html, 'html.parser')
# ALL_CNT만 추출하기 위한 코드
result = eval(bs_obj.text)
result['data'][0]['ALL_CNT']
Web scraping 시 주의사항
권한 확인(robots.txt)
API를 사용하지 않을경우, 반드시 권한 확인하기
일반적으로 크롤링하려는 사이트 뒤에 robots.txt 붙여서 검색하면 볼 수 있음
ex. https://www/naver.com/robots.txt
데이터 요청 주기
웹 서버에 계속 데이터를 요청하는 행위는 디도스 공격과 유사한 행위
짧은 시간에 수많은 요청 → 웹 서버에 부하 일으킴
time.sleep()으로 적절히 쉬어가면서 데이터 요청
이를 잘못 사용해서 IP도 block당하는 경우도 존재
저작권 주의
데이터를 받아서 혼자서 사용할 경우, 큰 문제가 없을 수 있음
But 문제 있는 경우도 있으니 반드시 확인
상업적으로 이용할 경우 문제 발생할 수 있으니 반드시 확인!!
Web Scraping이 활성화되면서 웹서버에서는 봇을 차단
꼭 필요하다면 별도의 기술이 필요할 수도 있음
정적 웹페이지 vs 동적 웹페이지 참고| 웹이라고 다 같은 웹이 아니에요, 정적 웹과 동적 웹 (maily.so)
웹이라고 다 같은 웹이 아니에요, 정적 웹과 동적 웹
(큐레이션) 페이스북이 뉴욕타임스에 애플 비난 전면 광고를 낸 이유
maily.so
selenium 설치| https://irisyj.tistory.com/3
[크롤링] 셀레니움(Selenium)_설치방법
셀레니움(selenium) 파이어폭스, 인터넷 익스플로어, 크롬 등과 같은 브라우저를 컨트롤할 수 있게 해 준다. 설치하기 pip install selenium pip을 사용하여 selenium을 먼저 설치해준다. webdriver 셀레늄은 web
irisyj.tistory.com
selenium 사용방법| https://irisyj.tistory.com/4
[크롤링] 셀레니움(Selenium)_사용방법
전체적인 모습 from selenium import webdriver # 경로 설정 path = 'C:\chromedriver_win32\chromedriver.exe' # 자신의 드라이버 위치로 설정 url = '원하는 url 경로' # 드라이버 설정 driver = webdriver.Chrome(path) driver.implicitl
irisyj.tistory.com
API 참고| API란? 비개발자가 알기 쉽게 설명해드립니다! - wishket
API란? 비개발자가 알기 쉽게 설명해드립니다! - wishket
여러분은 API가 무엇인지 알고 계신가요? 자주 듣지만 그 개념이 무엇인지 정확하게 알기 쉽지 않은데요. 이번 시간 위시켓이 API란 무엇인지 알기 쉽게 설명해드리고자 합니다.
blog.wishket.com
'2023_국민대 > 텍스트 데이터 분석' 카테고리의 다른 글
[텍데분] Web Scraping 2 (0) | 2023.04.16 |
---|---|
[텍데분] Web Scraping 1 (0) | 2023.04.15 |
[텍데분] Regular Expression 3 (0) | 2023.04.12 |
[텍데분] Regular Expression 2 (0) | 2023.04.12 |
[텍데분] Regular Expression 1 (0) | 2023.04.12 |