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

Nuri님의 프로필 이미지
Nuri

작성한 질문수

[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

-

header 관련 질문

작성

·

451

0

안녕하세요. 현재 거의 완강을 한 학생이자, 업무에서도 크롤링을 나름 잘 활용하고 있습니다. 그래도 여러 가지 어려운 에러를 많이 만나는데, 그 중 하나가 header 관련 입니다.

 

우선, 제가 크롤링을 시도하고 있는 웹사이트는 라쿠텐 일본 (https://search.rakuten.co.jp/search/mall/-/560202/?p=2&used=1) 웹사이트입니다. 1페이지까지는 크롤링이 잘 되는데, 2페이지부터는 크롤링이 되지 않고, 하기와 같은 화면이 나오네요.

제가 구글링을 많이 해본 결과, 웹사이트에서 크롤링 방지를 위해 무엇인가 설정을 해놓은 것이 아닐까 생각이 되고, 그래서 수업 중에 설정했던 header에 관해 여러 설정을 해보고 있는데, 아직 성공적으로 돌리지 못했네요.

 

전 셀레니움을 사용해서 다음과 같은 설정을 추가해봤습니다만, 혹시 관련해서 조언을 주실만한 사항이 있을까요?

헤더나 설정을 할 때 무엇이 어떻게 필요한지 어떻게 아는지도 매우 궁금합니다.

답변 2

0

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

안녕하세요!

스타트코딩입니다.

 

라쿠텐 사이트는 서버가 셀레니움을 감지하고 두번째 요청부터는 차단을 하는 것으로 보입니다.

header 옵션과 쿠키설정도 해보았지만 계속 차단을 당하고 있네요.

 

헤드리스, 디버거 모드를 추가로 시도해 보시면 좋을 듯합니다.

 

그리고 정적인 페이지라서 requests, bs4 로 크롤링하면 어떨까요?

html 데이터를 잘 받아옵니다.

 

import requests
from bs4 import BeautifulSoup

response = requests.get("https://search.rakuten.co.jp/search/mall/-/560202/?p=2&used=1")
soup = BeautifulSoup(response.text, 'html.parser')
soup.prettify()

감사합니다 :)

 

Nuri님의 프로필 이미지
Nuri
질문자

알겠습니다. 시도해보겠습니다!!!

0

안녕하세요, 인프런 AI 인턴이에요.

크롤링에서 header는 HTTP 요청 메시지를 통해 웹 서버에게 전달하는 정보로, 해당 요청이 유효한 것인지에 대한 판단을 하는데 있어서 중요한 역할을 합니다. 그러므로 적절한 header를 설정하는 것은 크롤링의 성공 여부에 매우 중요한 영향을 미칩니다.

우선, 해당 사이트에서는 크롤링 방지를 위해 봇으로 판단하면 페이지가 제공되지 않는 것으로 보이는데요. 이 경우 User-Agent 값을 일반적인 브라우저로 변경해주는 것이 좋습니다. 셀레니움을 사용할 때는 다음과 같이 설정해보세요.

options = webdriver.ChromeOptions()
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
driver = webdriver.Chrome(chrome_options=options)

또한, 해당 사이트에서는 페이지 이동 시에 쿠키 정보도 함께 전달되는 것으로 보입니다. 그러므로 페이지 이동 시에도 쿠키 정보를 함께 전달해주는 것이 좋습니다. 다음과 같이 설정해보세요.

driver.get("https://search.rakuten.co.jp/search/mall/-/560202/?p=2&used=1")
cookies = driver.get_cookies()
for cookie in cookies:
   driver.add_cookie(cookie)

이외에도 referer, accept, accept-language 등의 header 값을 설정해보시기 바랍니다. 크롤링을 시작하기 전에는 사이트의 로그인 여부, 사용 가능한 API 등을 파악하고 적절한 header 값을 설정하여 웹 사이트로부터 필요한 정보를 수집해내는 것이 좋습니다.

해당 사이트에서의 크롤링 요청에 대한 header 정보가 어떻게 구성되는지 파악하는 데는 브라우저의 개발자 도구를 활용하면 좋습니다. 브라우저의 개발자 도구에서 네트워크 탭을 열고 해당 사이트를 방문한 후, 요청에 대한 header 값을 확인하실 수 있습니다.

크롤링 시에 어려운 에러가 많이 발생하는 것은 어렵지 않게 이해할 수 있습니다. 하지만 지속적인 노력과 공부를 통해 이를 극복하고 발전시킬 수 있을 거예요. 어려움을 겪을 때마다 인프런의 수많은 강의나 커뮤니티를 활용하셔서 지식을 쌓아보는 것을 추천합니다.

힘낼 수 있도록 응원합니다!

Nuri님의 프로필 이미지
Nuri

작성한 질문수

질문하기