작성
·
407
·
수정됨
0
import requests
from bs4 import BeautifulSoup
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/128.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")
print(soup)
위 코드 사용 시 아래와 같은 결과가 나타납니다.
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/128.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) # req = requests.get(url, headers=headers) # print(req.request.headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup)
<title>네이버쇼핑</title>
</head>
<body>
<div class="content_error">
<div class="head">쇼핑 서비스 접속이 일시적으로 제한되었습니다. </div>
<div class="desc">
네이버는 안정적인 쇼핑 서비스 제공하고자 시스템을 통해 아래와 같은 비정상적인 접근이 감지될 경우 해당 네트워크의 접속을 일시적으로 제한하고 있습니다.
</div>
<ul class="reason">
<li>상품 구매, 탐색과 무관한 외부 이벤트를 통한 접속</li>
<li>짧은 시간 내에 너무 많은 요청이 이루어진 IP</li>
<li>VPN을 사용하여 접속한 IP</li>
<li>특정 확장 프로그램 이용 시</li>
</ul>
<div class="footer">위와 같은 접근이 아님에도 접속이 제한된 경우,네이버앱을 업데이트 또는 <a href="https://help.naver.com/service/30016/category/5278" target="_blank"> 원클릭 진단</a>을 부탁드립니다.<br/> 해당 방법을 통해서도 접속이 불가한 경우 <a href="https://help.pay.naver.com/mail/form.help?alias=shopping_stop" target="_blank">네 이버쇼핑 고객센터</a>로 문의 부탁드립니다.</div>
</div>
</body>
</html>
이런 상황에서 대안이 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
접속 제한 현상은 웹 서버가 봇이나 스크래핑 도구로부터의 접근을 막기 위해 설정한 방어 메커니즘 때문에 발생합니다. 네이버 쇼핑에서 비정상적인 접근으로 판단하여 접속을 제한한 것으로 보입니다. 이를 해결하기 위한 몇 가지 방법을 제시해 드립니다.
IP 변경: 접속 제한이 IP 기반으로 이루어진 경우, IP를 변경하면 문제를 해결할 수 있습니다. VPN을 사용하거나 프록시 서버를 통해 IP를 변경해 보세요. 단, 네이버는 VPN 사용을 감지할 수도 있으니 이 점 유의해 주세요.
헤더 정보 수정: 현재 사용하고 계신 User-Agent 외에도, 완전히 브라우저로 인식될 수 있는 다른 정보(예: Referer, Accept-Language 등)를 헤더에 추가해 보세요.
요청 간격 조절: 서버에 과도한 요청을 보내지 않도록 요청 간에 일정 시간 간격을 두고 접근하세요. 너무 많은 요청이 짧은 시간 내에 이루어진 것을 감지하여 접속을 제한할 수 있으니, 각 요청 사이에 time.sleep() 함수를 사용해 시간 지연을 추가하는 것이 좋습니다.
세션 유지: requests.Session()을 사용하여 서버와의 세션을 유지하면서 요청을 보내 보세요. 이 방법은 서버가 요청을 더 자연스러운 브라우저 사용으로 인식하게 도와 줄 수 있습니다.
셀레니움 사용: 웹 페이지 자동화 도구인 셀레니움(Selenium)을 사용하면 실제 웹 브라우저를 동작시켜 사이트에 접근하므로, 서버로부터 일반적인 사용자로 인식될 확률이 높아집니다. 하지만 셀레니움은 크롤링 속도가 상대적으로 느릴 수 있으니, 사용에 앞서 고려해야 할 점입니다.
위 방법들을 시도해 보시기 바라며, 정책에 위반되지 않는 선에서 합법적인 데이터 수집을 해 주시기 바랍니다. 또한, 사이트의 이용 약관을 꼼꼼히 확인하고 존중하는 것이 중요합니다.
고생하십니다. 친절한 답변 감사드립니다.