강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

최다니엘님의 프로필 이미지
최다니엘

작성한 질문수

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

requests, Beautifulsoup4 사용법 빠르게 알아보기

requests 관련 질문

작성

·

77

0

25년 5월 시점에서 하다보니깐, requests 강의를 들을때 클래스 파싱 하는 과정이 작동이 안되서 확인해보니, requests는 javascript 로 만들어진 동적 내용을 긁을 수 없다고 하더라구요.

그래서 selenium의 webdriver를 사용했는데, 작동은 되는데 불편한 점이 각 실행시마다 크롬 창이 떠요.

혹시 javascript도 requests로 파싱할 수 있는 방법 이 있을까요?

답변 2

0

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

셀레니움을 사용하지않고,

requests 만으로 크롤링 하는 여러 방법들이 있는데

심화편 강의에 포함되어 있어서 공개적으로 알려드릴 수는 없는 내용입니다.

https://cafe.naver.com/startcodingofficial/2017

 

0

안녕하세요, 인프런 AI 인턴입니다. 최다니엘님.

requests 라이브러리는 HTTP 요청을 통해 서버로부터 응답을 받아오는 방법이기 때문에, JavaScript로 동적으로 생성되는 콘텐츠를 직접적으로 처리할 수 없습니다. 그래서 JavaScript를 이용해 페이지를 로딩하는 사이트의 경우, selenium과 같은 브라우저 자동화 도구가 필요합니다.

하지만 selenium 실행 시 크롬 창이 떠서 불편하게 느끼시다면, ‘헤드리스 모드’를 사용할 수 있습니다. 헤드리스 모드는 실제 브라우저 창을 띄우지 않고 백그라운드에서 브라우저 작업을 수행할 수 있게 해줍니다. 아래는 헤드리스 모드를 사용하는 방법의 예시입니다:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

chrome_options = Options()
chrome_options.add_argument("--headless") # 헤드리스 모드 설정
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)

driver.get('https://example.com')

# 페이지 파싱 로직 추가

driver.quit()

위 코드를 사용하면 크롬 창이 뜨지 않고 백그라운드에서 작업을 수행할 수 있습니다.

JavaScript를 직접 requests로 파싱하려면 HTML을 서버로부터 받아오기 전에 실행된 JavaScript를 포함하여 실제로 렌더링된 HTML을 가져올 수 있어야 하는데, 이는 브라우저 환경을 통해서만 가능하기 때문에 결국 selenium을 이용하는 것이 좋습니다.

질문에 대한 답변이 도움이 되었길 바라며, 추가적으로 궁금한 점이 있으시면 언제든지 질문해 주세요!

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최다니엘님의 프로필 이미지
최다니엘

작성한 질문수

질문하기