구글 스크래핑 문의드립니다..(초보주의)

조회수 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 를 이용하는 방식은 가볍고 빠릅니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)