[Python] BeautifulSoup 파이썬 크롤링 할 때, html tag 데이터 값이 안 읽어와질때 해결법(Selenium)



1. 문제

다른 사이트의 데이터를 수집할 때 주로 Python 을 사용합니다. Python 크롤링시에 requests 를 사용하여 api를 호출하고 data를 요청한 후에, BeautifulSoup 를 사용하면 Crawling 을 쉽게 할 수 있는데요. Crawling 을 하다가 데이터가 불러와지지 않는 경우가 있습니다.

import requests
from bs4 import BeautifulSoup

req = requests.get('데이터를 얻고 싶은 url')
html = req.text
soup = BeautifulSoup(html, 'html.parser')
soup.select('찾고 싶은 html tag')

분명히 사이트에서는 html 태그가 보이는데, 왜 데이터를 가져올 수 없는 것일까요?

2. 해결법

이러한 케이스의 경우 html 파일을 만들 때, 사이트에서 동적으로 데이터를 불러오기 때문에 발생할 수 있습니다. 해당 주소로 접속하면 일단 기본적으로 필요한 data들을 불러오고, 추가로 서버에서 api를 호출하여 json을 불러와서 html 에 데이터를 넣어주는 케이스가 많습니다. 한 번에 데이터를 한 곳에서 불러오는 것은 서버의 효율에도 좋지 않고, 속도도 느리기 때문에 대부분의 서비스들은 데이터를 동적으로 받아오는 케이스가 많습니다. 이 때 어떻게 해야 문제가 해결될가요?

이 때에는 BeautifulSoup 대신에 Selenium 를 사용해주어야 합니다. Selenium 는 실제 브라우저를 사용하여 데이터를 모두 받은 후에, 실제로 존재하는 데이터를 가져옵니다.