구글 스크래핑 문의드립니다..(초보주의)
조회수 721회
안녕하세요, 아래와 같이 '구글'에서 Daeboo를 검색하여 영화 타이틀을 변수에 담아 추출 하려고 합니다.
Q1. 결과값이 None으로 나오는 이유는 무엇인가요.. Q2. 아래 두 번째 셀레니움 모듈시에는 제대로 추출이 가능한데 두 코드의 차이점은 무엇인가요..
import requests
from bs4 import BeautifulSoup
url = "https://www.google.com/search?q=daeboo"
html = requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')
title = soup.find("div", {"class" :"kno-ecr-pt"})
print(title)
=====================================================
from bs4 import BeautifulSoup
from selenium import webdriver
url = "https://www.google.com/search?q=daeboo"
driver = webdriver.Chrome('/Users/jameskwon/Downloads/chromedriver')
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
r = soup.select_one('div .kno-ecr-pt').text
print(r)
driver.close()
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
A1.
title = soup.find("div", {"class" :"kno-ecr-pt"})
에 일치하는 값이 없기 때문입니다. 질문자께서는 구글의 검색 결과 화면의 html 에서 검색하는 것 아닐까 하겠지만 그렇지가 않습니다.html 을 다운로드후에 javascript 를 이용하여 비동기적으로 데이터를 호출합니다. 이 부분은 브라우져에서 이뤄지는 작업이라 requests 만으로는 원하는 결과를 얻을 수 없습니다.
A2. selenium 을 이용하는 방식은 브라우저를 실행하여 결과를 받기 때문에 javascript 까지도 다 수행된 결과를 이용하게 됩니다. 그러니 원하는 결과를 얻을 수 있는 겁니다.
그러면 selenium 방식만 알면 되는 것 아니냐고 할 수 있는데 장단점이 있습니다. 무엇보다 브라우져를 실행시켜야 하므로 리소스를 많이 사용하고 느립니다. 반면에 requests 를 이용하는 방식은 가볍고 빠릅니다.
댓글 입력