일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- jenkins
- jQuery
- Anolog
- cookie
- SseEmitter
- 항해99
- Stream
- DI
- session
- JWT
- Spring Security
- web
- JPA
- html
- WIL
- flask
- javascript
- real time web
- google oauth
- Project
- Java
- spring
- programmers
- server send event
- bean
- Hibernate
- 생명주기 콜백
- hanghae99
- python
- oauth
- Today
- Total
끄적끄적 코딩일지
BeautifulSoup + Selenium을 이용한 동적 페이지 크롤링 본문
프로젝트를 진행하다가 웹 크롤링을 해야하는 상황이 생겼다
자신있게 requests 모듈을 써서 테스트 코드 작성후
실행을 해보는데...
from bs4 import BeautifulSoup
import requests
url = '크롤링 페이지'
html = requests.get(url)
bs = BeautifulSoup(html.content,'html.parser')
print(bs.find_all('내가 찾는 tag',{'class':'내가 찾는 tag의 클레스'}))
print 출력 결과...
[]
??? 뭐야 왜 페이지가 비어있어??
구글링 해보니 내가 필요한 정보는 동적(dynamic)으로 체워지는 모양
(하긴 동적인 크롤링할 가치가 있는 데이터는 왠만하면 동적페이지가 대부분이긴 하지..)
그런데 requests 모듈은 동적웹을 크롤링 할수가 없다고 나오네???
그래서 찾은 해결방법이 web browser를 컨트롤 해주는 Selenium을 사용하는것!!
찾아보니 다양한 기능을 제공한다.
타이핑, 클릭 등 인터넷 브라우저로 할수있는 대부분을 코드로 할수 있도록 해주는 web driver이다.
이 selenium을 사용하면 자동으로 페이지가 전부 로딩이 되면 그때 페이지 소스를 제공해 준다.
바로 모듈을 설치하고
pip install selenium
바로 코드를 짜서 실행을 하려고 하는데.... webdriver라는게 필요하다네?
chrome을 사용하면 chrome webdriver가 firefox를 사용하면 geko driver등이 필요하덴다.
나는 크롬을 사용하므로 다시한번 구글링을 통해 chrome web driver을 찾아보았다.
https://chromedriver.chromium.org/downloads
여기서 중요한게 자신의 PC에 설치되어있는 chrome 버전과
똑같은(최소한 비슷하기라도 한)
버전의 driver을 찾아 설치해야 한다는것이다.
아니 다른 글들은 이런거 좀 빨간 글씨로 경고라도 해 놓지 그냥 적어두니까 못보는거 아니야 ;;
만약 다른 버전의 드라이버를 사용하면 아래 오류를 내밷는다.
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 98
Current browser version is 101.0.4951.54 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
해석하자면 넌 101.0.4951.54 버전을 사용중인데 왜 98 버전의 드라이버를 사용하냐는 것이다.
다시 재대로된 파일을 다운로드 받아서 코드 작성...
from bs4 import BeautifulSoup
from selenium import webdriver
url = '내가 긁어올 페이지'
# 이게 pc에 설치되어있는 chrome을 제어하는거라서 그냥 실행시키면 창이 나오고
# 입력되고 하는게 다 보인다.
# headless option을 주어서 background에서 실행이 되도록 하자
driver_options = webdriver.ChromeOptions()
driver_options.add_argument("headless")
driver = webdriver.Chrome(executable_path='다운로드받은 driver 경로')
driver.get(url)
soup = BeautifulSoup(driver.page_source,'html.parser')
print(soup)
# 잊지말고 동작이 끝나면 driver을 종료할것!
driver.quit()
결과는 제대로 동작!!! 제대로 동적 페이지가 크롤링이되고있다.
'Python' 카테고리의 다른 글
Jinja2를 사용해서 페이지를 만들어보자 (0) | 2022.05.11 |
---|---|
[python] APScheduler 사용하기 (0) | 2022.05.10 |
Flask 사용하기 (0) | 2022.03.24 |
MongoDB 시작하기 (0) | 2022.03.23 |
Beautiful soup 사용하기 (0) | 2022.03.23 |