인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김세종님의 프로필 이미지
김세종

작성한 질문수

실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용

네이버 쇼핑 크롤링 문의

해결된 질문

작성

·

458

1

from bs4 import BeautifulSoup
import requests

keyword = input("검색할 제품을 입력하세요 : ")

url = f"https://search.shopping.naver.com/search/all?query={keyword}"

user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"

headers = {"User-Agent" : user_agent}

req = requests.get(url, headers = headers)

html = req.text
soup = BeautifulSoup(html, 'html.parser')

items = soup.select(".product_item__MDtDF")

print(items)
print(len(items))

네이버 쇼핑 크롤링 중 문의사항이 있어 글 남깁니다

위의 코드 처럼 네이버 쇼핑에서 검색 시 상품 정보 중 product_item__MDtDF를 받아와서 리스트를 만드려고 하는데 크롬 개발자도구에서는 11개로 검색되지만 위의 코드를 실행하여 '모니터'를 검색해보면 len가 1밖에 나오지 않습니다.

product_item__MDtDF를 제외하고는 강의 내용과 동일한거 같은데 어디에 문제가 있는 걸까요..?

답변 1

1

김플님의 프로필 이미지
김플
지식공유자

개발자도구에서 보이는 소스코드는 지금 현재 화면의 소스코드입니다. 화면을 스크롤해서 제품 갯수가 늘어나면 product_item__MDtDF의 갯수도 늘어납니다.
하지만 화면에서 마우스 오른쪽 버튼을 눌러 페이지 소스 보기를 하시면 product_item__MDtDF는 한개만 나옵니다. 페이지 소스 보기는 처음에 로드 된 페이지 소스 그 자체인거죠.
requests.get으로 접속해서 가져온 html은 현재 화면의 소스코드가 아니라 바로 페이지 소스 보기에서 볼 수 있는 html인것입니다.
여러개의 product_item__MDtDF를 받아오려면 requests가 아닌 selenium을 사용해야 합니다.

김세종님의 프로필 이미지
김세종

작성한 질문수

질문하기