네이버 증권 종목토론실 101번째 페이지 링크

조회수 772회

네이버의 여러 카테고리중 "증권"에 들어가보면 각 종목별로 "종목토론실"이라는 투자자 게시판이 있습니다. 예를들어 삼성전자 종목토론실의 링크는

https://finance.naver.com/item/board.naver?code=005930&page=2 https://finance.naver.com/item/board.naver?code=005930&page=3 https://finance.naver.com/item/board.naver?code=005930&page=4

이런식으로 링크 끝 page= 에 페이지번호에 해당하는 숫자를 붙어 있습니다.

그런데 페이지번호 101부터는

https://finance.naver.com/item/board.naver?code=005930&page=101

[잘못된 접근]이란 오류가 발생하면서 url을 이용한 접근이 안되고 화면에서 다음 페이지링크를 마우스로 클릭해야만 접근이 됩니다

아마 네이버에서 101번 페이지부턴 url을 이용한 직접 접근을 막아놓은 거 같습니다

예를들어 200번째 페이지를 보려면 마우스클릭을 수십번 넘게 해야하는데
101페이지 이상도 url로 접근할수 있는 방법이 있을까요?

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    웹 크롤링을 하려는 것으로 보입니다.

    웹 크롤링은 그 자체로 문제되지는 않습니다만, 하기 전에 본인이 이 데이터를 상업적 이용을 하려 한다면 문제가 될 수 있으니 주의하세요.

    회사에서 하려면 일단 확인해 보시고 개인 프로젝트라면 크게 문제될 여지는 없습니다.

    다만, 만약 크롤링을 할거면 적어도 크롤링 사이에 sleep을 조금이라도 넣어주세요.

    API로 공개되지 않은 것들에 너무 과도하게 부하를 주지 마세요.


    네이버에서 100 페이지 초과 페이지를 차단하는 방식은 간단합니다. HTTP 리퀘스트를 보낼 때 Header 값에 정상적인 웹 브라우저는 이전 페이지 정보인 referer 헤더를 보내게 됩니다.

    네이버의 차단은 해당 헤더를 이용해서 이뤄집니다.

    원리는 referer헤더가 없으면 거부하는 것으로 보입니다만, 확실하진 않습니다. 이건 직접 알아보세요.

    실제로 아래처럼 요청을 보내면 거부하지 않고 잘 처리합니다.

    Invoke-WebRequest -UseBasicParsing -Uri "https://finance.naver.com/item/board.naver?code=005930&page=101" `
    -Headers @{
      "authority"="finance.naver.com"
      "method"="GET"
      "path"="/item/board.naver?code=005930&page=101"
       "scheme"="https"
       "accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
       "accept-encoding"="gzip, deflate, br"
       "accept-language"="ko,en-US;q=0.9,en;q=0.8,ja;q=0.7,zh;q=0.6"
       "cache-control"="no-cache"
       "pragma"="no-cache"
       "referer"="https://finance.naver.com/item/board.naver?code=005930&page=99"
       "sec-ch-ua"="`"Not_A Brand`";v=`"8`", `"Chromium`";v=`"120`", `"Google Chrome`";v=`"120`""
       "sec-ch-ua-mobile"="?0"
       "sec-ch-ua-platform"="`"Windows`""
       "sec-fetch-dest"="document"
       "sec-fetch-mode"="navigate"
       "sec-fetch-site"="none"
       "sec-fetch-user"="?1"
       "upgrade-insecure-requests"="1"
    }
    

    위 코드는 powershell 스크립트인데 쿠키나 다른 헤더는 크게 연관이 없어보이고 referer존재 여부만 영향을 주는 듯 합니다.

    여기서 위 줄 중 referer만 빼면 거부합니다.

    • 상세한 설명 감사합니다. 큰 도움이 됐습니다. 닉스 2023.12.17 18:31

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)