728x90
정적 페이지 : 데이터의 추가적인 변경이 일어나지 않는 페이지
동적페이지 : 데이터의 추가적인 변경이 일어나는 페이지
1. 셀레이움을 이용해 웹브라우저로 페이지에 접근
2. 자바스크립트가 자동으로 알맹이 채워줌
3. 완성된 HTML을 뷰티풀수프로 추출
네이버에서 공지사항 text를 뽑아올것인데....
아래처럼 실행해보면 아무일도 일어나지 않는다 그이유는
# 정적페이지 크롤링 방법으로 불가능
import requests
from bs4 import BeautifulSoup
html = response.text
soup = BeautifulSoup(html, 'html.parser')
soup.select_one("#footer > div > div.notice_area > div > h3 > a")
이렇게 type( soup.select_one("#footer > div > div.notice_area > div > h3 > a") )
type을 확인해보면
# 정적페이지 크롤링 방법으로 불가능
import requests
from bs4 import BeautifulSoup
html = response.text
soup = BeautifulSoup(html, 'html.parser')
type(soup.select_one("#footer > div > div.notice_area > div > h3 > a"))
NoneType 나오는데 이것은 응답받은 html에 껍데기만 들어있어서 껍데기만 들고왔으니 없는것이다.
그렇담 알맹이로 가득찬 페이지가 필요한데 그것은 셀레니움으로 JavaScript로 받아와 알맹이가 가득찬 페이지를 가져와보자
1.셀레니움으로 데이터 받아오기
# 셀레니움으로 페이지를 열고 알맹이를 받아온 다음 추출하기
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 준비물 : 크롬 드라이버를 다운받기 위해서는 크롬 브라우저가 깔려 있어야함
# 크롬 드라이버(크롬을 제어하는 도구) 생성
driver = webdriver.Chrome()
# 페이지 이동
2. 뷰티풀수프로 데이터 추출하기
#현재 드라이버의 HTML 가져오기
html = driver.page_source
soup = BeautifulSoup(html,"html.parser")
#데이터 추출
soup.select_one("#footer > div > div.notice_area > div > h3 > a").text
결과
'Python > Selenium' 카테고리의 다른 글
[Selenium] 구글 드라이버 제어 명령어 (1) | 2024.10.12 |
---|---|
[Selenium] 메일 자동화 iframe 제어 방법 (0) | 2024.10.12 |
[Selenium] 메일 자동화 새창 제어 방법 (0) | 2024.10.12 |
[Selenium] 로그인 자동화 프로그램 (캡차 우회) (0) | 2024.10.11 |
[Selenium] 셀레니움 기초 사용방법. (6) | 2024.10.11 |