해결된 질문
작성
·
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을 사용해야 합니다.