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

송내님의 프로필 이미지

작성한 질문수

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

도전! GUI 프로그램 완성하기

GUI를 변형하여 네이버 쇼핑에서 가져오는것 성공했지만... 도와주세요

24.09.09 22:22 작성

·

191

0

안녕하세요.

네이버 지식인 GUI 강의하신 내용 참고하여,
네이버 쇼핑을 GUI 로 만들어 보았습니다.
여러번 버버벅 거리면서 수정하여, GUI 에 제품명을 담고, 엑셀로도 제품명과 링크 저장하는데 까지 성공했습니다.
그런데, 네이버로 부터 ip 일시적 차단 경고 받았습니다.
사전에 ip 차단 염려하여 1 페이지만 크롤링했고, 코드에서는 2군데 time.sleep(2)도 두었는데도 , 네이버로 부터 경고 받았습니다. 그래서, 더 진행하다가 아예차단될까 두려워서 방법 문의 드립니다.

네이버 쇼핑 경고 ;
쇼핑 서비스 접속이 일시적으로 제한되었습니다.

네이버는 안정적인 쇼핑 서비스 제공하고자 시스템을 통해 아래와 같은 비정상적인 접근이 감지될 경우 해당 네트워크의 접속을 일시적으로 제한하고 있습니다.

상품 구매, 탐색과 무관한 외부 이벤트를 통한 접속

짧은 시간 내에 너무 많은 요청이 이루어진 IP

VPN을 사용하여 접속한 IP

특정 확장 프로그램 이용 시

위와 같은 접근이 아님에도 접속이 제한된 경우,네이버앱을 업데이트 또는 원클릭 진단을 부탁드립니다.

해당 방법을 통해서도 접속이 불가한 경우 네이버쇼핑 고객센터로 문의 부탁드립니다.

적용된 코드 입니다;
차단 원인과 해결방법 도와주세요~~

감사합니다

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from PySide6.QtWidgets import QApplication,QWidget
from nShopping_c_ui import Ui_Form
import requests
import sys
import time
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC



class MainWindow_c2(QWidget,Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.start_btn.clicked.connect(self.start)
        self.reset_btn.clicked.connect(self.reset)
        self.save_btn.clicked.connect(self.save)
        self.quit_btn.clicked.connect(self.quit)


    def start(self):
        input_keyword=self.keyword.text()
        input_page=int(self.page.text())
        

        self.result=[] # 적재창고 건설

        # 크롬 드라이버 생성
        self.driver=webdriver.Chrome()

        for i in range(1, input_page+1):
            self.textBrowser.append(f'{i}페이지 크롤링...')
            self.driver.get(f"https://search.shopping.naver.com/search/all?adQuery={input_keyword}&origQuery={input_keyword}&pagingIndex={i}&pagingSize=40&productSet=total&query={input_keyword}&sort=rel&timestamp=&viewType=list")
            #스크롤 전 높이 확인
            last_height=self.driver.execute_script("return document.body.scrollHeight")

            while True:
                #스크롤 끝까지 내리기
                self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
                
                #잠시대기
                time.sleep(2)

                # 스크롤 후 높이
                new_height=self.driver.execute_script("return document.body.scrollHeight")

                # 비교(if, break)
                if new_height==last_height:
                    break

                # 스크롤 전 높이 업데이트
                last_height=new_height

                html=self.driver.page_source
                soup=BeautifulSoup(html,'html.parser')
                #나무태그 찾기
                items=soup.select(".product_item__MDtDF")
                for item in items:
                    # 각 아이템에서 제목과 링크 추출
                    name=item.select_one(".product_title__Mmw2K>a").text
                    link=item.select_one(".product_title__Mmw2K>a").attrs['href']
                    self.textBrowser.append(name)
                    self.result.append([name, link])
                    QApplication.processEvents()
                time.sleep(2)
        self.textBrowser.append('크롤링 완료...')

                
    def reset(self):
        self.textBrowser.setText("")
        self.keyword.setText("")
        self.page.setText("")
        
    def save(self):
        input_keyword=self.keyword.text()

        df=pd.DataFrame(self.result,columns=['제목','링크'])
        df.to_excel(f'{input_keyword}_d.xlsx')

    def quit(self):
        self.driver.quit()  # 크롬 드라이버 종료
        sys.exit()

app=QApplication()
window=MainWindow_c2()
window.show()
sys.exit(app.exec())

답변 2

0

송내님의 프로필 이미지
송내
질문자

2024. 09. 10. 22:07

감사합니다~ ..... 새가슴으로 페이지 for 문 막아놓고 하니까 또 크롤링 됩니다. 서버가 눈치 채지 못하는 포인트를 찾도록 하겠습니다 ~

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

2024. 09. 11. 18:11

ㅋㅋㅋㅋ 너무 새가슴일 필요가 없어요

크롤링이라는게 불법도 아니고, 그냥 페이지를 요청하는 것 뿐이잖아요?

 

구글이나 네이버 크롤러도 다른 페이지 계속해서 접근하는건데

너무 걱정하실 필요 없습니다 🙂

0

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

2024. 09. 09. 22:37

IP차단 경고를 받아서 마음 고생을하셨군요!

저도 그마음 충분히 이해합니다 (처음 봤을 때 무서웠어요...)

근데 지나고 보면 별거 아니라는거~

 

네이버 쇼핑의 경우 크롤링에 조금 민감한 편입니다.

 

IP 차단과 같은 정책은 서버쪽에서 트래픽을 확인하고 막는거기 때문에

해결방법이 이거다!라고 말씀 드리긴 어려울거 같아요 ㅎㅎ

 

지금 단계에서는 기간을 두고,

속도를 낮춰가면서 테스트하는 방법이 제일 베스트고,

 

고급 기술로는 프록시를 이용해서

하나의 IP가 막히면 다음 IP로 변경하는 방법이 있을 거 같습니다.

송내님의 프로필 이미지

작성한 질문수

질문하기