파이썬 beautifulsoup 크롤링 질문드립니다.
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
import os
baseurl = 'https://www.sbs.co.kr/schedule/index.html?type=dmb&channel=DMB+TV&pmDate='plusurl = input("날짜입력(ex:20200815):")url = baseurl + urllib.parse.quote_plus(plusurl)
html = urllib.request.urlopen(url).read()soup = BeautifulSoup(html, 'html.parser')
print(soup)
--------------------------------------------------------------------------------------------------------------
위의 코드들은 해달날짜를 입력하면 홈페이지에서 편성표를 크롤링목적으로 작성하고 있는코드중 앞부분입니다.
뒤에 select나 find를 이용하여 편성시간,편성내용을 긁어올려고 하는데, 일단 여기까지 코딩을 돌려보면 html전체가 출력되어야 하는데 일부분만 출력이 됩니다. 안긁어와지는 부분에 원하는 데이터가 있는데 말이죠...ㅠㅠㅠ
html 전체를 출력하려면 여기서 무엇을 수정해야할지 문의드립니다...ㅠ
페이지를 보니 데이터를 비동기로 불로 오고 있습니다.
비동기로 불러올 경우 BS4로 크롤링하기가 어렵습니다.
저는 보통 이런 사이트를 requests만을 사용해서 데이터를 json만 가져오고 있습니다.
아래 주소를 보시면 2020/08/28이 부분이 날짜 입력 같습니다. ?= 뒤에 오는 데이터는 Timestemp 같습니다.
https://static.cloud.sbs.co.kr/schedule/2020/8/28/DMB+TV.json?_=1598605411865
자바스크립트로 동적으로 받아오기 때문에 html에 parsing이 안됩니다.
그럴땐 selenium을 사용해서 원하시는 html정보를 동적으로 확인할 수 있습니다.
selenium 환경은 1) python 설치와 2) chrome driver가 필요합니다.
1) python 설치
selenium 설치는 2가지 중 맞는 환경에 맞춰 한가지를 선택해서 설치하시면 됩니다.
conda install selenium #anaconda를 사용할 시 pip install selenium #pip install로 설치2) chrome driver 설치
https://sites.google.com/a/chromium.org/chromedriver/downloads
윈도우의 경우에는 chromedriver.exe 파일을 확인하실 수 있는데, PATH 지정이나 프로젝트 내 파일을 옮겨주시면 프로젝트 실행시에 구동하게 됩니다.
import urllib.request import urllib.parse from bs4 import BeautifulSoup import os import requests from selenium import webdriver driver = webdriver.Chrome() baseurl = 'https://www.sbs.co.kr/schedule/index.html?type=dmb&channel=DMB+TV&pmDate=' plusurl = input("날짜입력(ex:20200815):") url = baseurl + urllib.parse.quote_plus(plusurl) driver.get(url) html = driver.page_source soup = BeautifulSoup(html) print(soup)질문해주신 코드에 selenium이 추가된 코드입니다.
안녕하세요,
해당 사이트는 html 코드를 javascript를 이용하여 동적으로 생성하고 있습니다.
javascript 코드가 필요한 부분을 서버에 요청하면, 서버에서 렌더링 해서 구조를 반환하는 구조 입니다.
그렇기 때문에 javascript가 실행이 되지 않은 경우 빈 페이지만 보이게 됩니다.
urllib은 html 페이지를 가져오는 기능은 있으나, javascript를 실행하는 기능은 없습니다.
해당 페이지를 크롤링 하려면 셀레니움(Selenium)으로 크롬 웹 드라이버(chrome web driver)를 이용하셔서 페이지를 불러오시고,
그 이후에 bs4 혹은 lxml을 이용해 필요한 부분을 추출하시면 될 것입니다.
감사합니다.