작성
·
452
0
안녕하세요 파린이입니다!
현재 웹스크래핑을 독학중에 있는데요
아래와 같이 코드를 작성했을 때 a태그값을 불러오지 못합니다.
문제점이 뭔지 확인을 하기 위해 soup만을 작성하여 전체 html 코드를 가져오면 사이트 개발자도구에 나타나는 코드보다 현저하게 적은 코드들만이 불러와 집니다.
ex. 숨김처리 펼치기 전 코드들이 대부분 나오지 않는 것 같습니다.
그래서 print(soup.title)이라고 했을 때는 해당 값이 html코드에 존재해서 정상적으로 '네이버 웹툰' 이라는 값이 불러와 지는데 그 외 a 태그와 같이 사이트 내에는 존재하지만 print(soup)을 통해 출력했을때 나오지 않는 태그들은 None값이 출력됩니다.
전체 html코드를 전부 가져오려면 어떻게 해야 할까요?
작성 환경은 아나콘다의 주피터노트북입니다.
from bs4 import BeautifulSoup
import requests
url = 'https://comic.naver.com/webtoon'
res = requests.get(url)
res.raise_for_status()
soup = BeautifulSoup(res.text, 'lxml')
print(soup.a)
-> None
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
코드를 확인해보니, 웹 스크래핑을 위해 requests와 BeautifulSoup 모듈을 사용하셨군요. 해당 코드에서는 네이버 웹툰 홈페이지에서 html 코드를 가져와서 출력하는 것 같습니다.
문제의 원인은 홈페이지에서 requests로 가져온 html 코드에 일부 요소가 포함되어 있지 않기 때문일 수 있습니다. requests로 가져온 html 코드는 실제 홈페이지의 전체 html 코드가 아닐 수 있습니다. 일부 요소가 동적으로 생성되는 경우나 ajax 요청으로 데이터를 받아오는 경우 등에 이런 문제가 발생할 수 있습니다.
이런 경우에는 Selenium과 같은 브라우저 자동화 도구를 사용하면 동적으로 데이터를 로딩해올 수 있습니다. Selenium은 실제 웹 브라우저를 제어하여 화면에 보이는 요소들을 가져올 수 있습니다. 아나콘다의 주피터 노트북에서 Selenium을 사용할 수 있는 webdriver로 ChromeDriver를 설치하고, 아래와 같이 코드를 수정해보세요.
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome('chromedriver.exe') # ChromeDriver의 경로를 지정해주세요.
url = 'https://comic.naver.com/webtoon'
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')
print(soup.a)
위의 코드에서는 Selenium을 통해 ChromeDriver를 실행하고, 해당 홈페이지를 불러온 후에 driver.page_source를 통해 전체 html 코드를 가져오고 있습니다. BeautifulSoup으로 파싱한 후에는 원하시는 태그 값을 가져올 수 있을 거에요.
하지만 웹 스크래핑은 홈페이지의 서비스에 따라 정책 및 법적 제약사항이 있을 수 있으니, 해당 홈페이지의 이용 정책을 확인하시고, 적법하게 스크래핑을 진행해야 합니다.
추가적으로, 웹 스크래핑을 할 때는 서버 부하를 줄이기 위해 적절한 딜레이나 요청 제한을 설정하는 것이 좋습니다.
그럼 성지님의 웹 스크래핑 공부가 좋은 결과로 이어지길 바랄게요! 어려운 점 있으면 언제든지 물어보세요. 수고하세요!