스누피 클래스 사용법

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
스누피 클래스 사용법

QA

스누피 클래스 사용법

본문

안녕하세요 스누피클래스를 이용해 한국금거래소에 텍스트들을 따올려고 하는데요. 아직 사용법을 잘 몰라서 그런지 원하는 부분이 출력이 안됩니다..ㅠㅠ ( https://www.koreagoldx.co.kr/main/html.php?agencyCode=&htmid=goods/gold_list.html ) 를 에 있는3739757472_1616930758.9856.png

여기 부분의 텍스트들을 가져올라는데 인터넷에 있는 스누피클래스 예제 코드 복붙해서 주소만 금거래소로 바꿔서 할려는데 전체적으로는 소스를 가져오는건 되는데 제가 원하는 부분만 가져오질 않네요.. 금거래소 사이트로 가면 저 테이블이3739757472_1616932811.7625.png

이렇게 example-table이라는 id를 가지는 div안에 들어가는건데 제가 이렇게 코드를 짜면 제 홈페이지에


<?php
        include_once("Snoopy.class.php");
        $snoopy = new Snoopy;
        
        $snoopy -> maxframes = 5;
        
        if ($snoopy -> fetch("https://www.koreagoldx.co.kr/main/html.php?agencyCode=&htmid=goods/gold_list.html")) {
            //  echo "<PRE>".htmlspecialchars($snoopy->results[0])."</PRE>\n";
            //  echo "<PRE>".htmlspecialchars($snoopy->results[1])."</PRE>\n";
            //  echo "<PRE>".htmlspecialchars($snoopy->results[2])."</PRE>\n";
            $endtext = explode("</html>", $snoopy->results);//파싱할 마지막부분
            $starttext = explode("<html>",$endtext[0]);//파싱할 첫번째부분
            print_r($starttext[1]);//파싱된내용확인
        } else {
            echo "error fetching document: ".$snoopy->error."\n";
        }
    ?>

3739757472_1616932897.9718.png

example-table이라는 div안이 텅텅 비어있네요.. 초보자가 감히 의심하건데 저 example-table이라는 id를 가진 div가 채워지는게 ajax로 데이터를 받아와서 채워지는데 스누피클래스로 하면 데이터를 받기도 전에 다 긁어와버려서 제 홈페이지에서는 비어져 있는게 아닌가 싶네요..3739757472_1616933148.5166.png

이렇게 tabulator?라는 javascript 라이브러리인지 아닌지 모르겠는걸로 테이블을 만들고 ajax로 데이터들을 json객체로 받아서 테이블에 뿌려주는건데 어디로 ajax통신을 하냐를 찾아봤더니 3739757472_1616933534.5565.png

여기로 post 방식으로 ajax 통신을 하고 lineUpVal이라는 json 객체로 받아오더군요. lineUpVal 이라는 객체는 어떤 정보가 들어있나 봤더니

3739757472_1616933794.6561.png

이렇게 인덱스로 엄청 담겨 있고 눌러보면

3739757472_1616933859.3172.png

여러가지 정보들이 담겨있는데 너무많아서 인덱스 하나에 들어있는 정보를 한 화면에도 못담네요.. 쨋든 결론은 저런식으로 홈페이지를 로드할때 tabulator라는걸로 테이블 만들고 ajax로 데이터를 가져오는건데 이 데이터를 가져오기전에 스누피클래스가 긁어와서 제 홈페이지에는 빈 div가 뜨는게 아닐까 의심을 해봅니다.. 물론 아직 초보자라 추측할 수 있는데로 추측은 해봤는데 아닌거같기도 하고..ㅠㅠ 그렇네요. 고수님들 왜 저 example-table이라는 div가 비어서 나오는지 이유와 해결 방법 좀 부탁드립니다.

이 질문에 댓글 쓰기 :

답변 2

예상하신 이유가 맞습니다

비동기로 받아와서 

페이지가 로드되면 ajax 데이터를 뿌려주기 때문에 

php로 컨텐츠를 가져오면 거기엔 없는거죠

 

https://apiserver.koreagoldx.co.kr/api/price/lineUp/list

똑같이 ajax로 가져와서 뿌려주시거나 (cros가 허용된 api)

php로 request해서 파싱하시거나 하심 되겠는데요

API 테스트툴로 제가 해보니

method는 post

header에 Content-Type: application/json

body에 json형식으로 {"srchDt": "ALL", "type": "Au"} 

실어보내니 리턴값을 주는데

srchDt가 All이라 데이터양이 상당하네요

 

thumb-3696253845_1616978640.3428_730x207.png

 

따로 인증은 거치지 않는 오픈된 데이터 같습니다

답변 감사합니다. Big1님 말씀대로 ajax로 해도 되겠네요. 저는 curl인가? 뭔가 하는걸로 그걸로 데이터를 받아와서 현재 성공했습니다.
혹시 사진으로 보여주신 API 테스트툴을 어떻게 사용했는지 알려주실 수 있을까요? 꽤 유용한 것 같네요^^
여담으로 저는 실수로 {"srchDt": "3M", "type": "Au"} 이렇게 해야하는데 {"srchDt": "Au", "type": "3M"} 이렇게 보내버려서 왜 3M을 보냈는데 전체를 받아오지? 이래서 쫌 고생했네요ㅋㅋㅋ

캡처에 사용된 건 크롬 확장 Talend API Tester 입니다
https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm?hl=ko

POSTMAN 같은 것도 많이들 씁니다
https://www.postman.com/

ajax 등으로 표시되는 데이터는 일반적인 크롤링 프로그램으로 가져오기 어렵습니다
소스 분석을 하여 ajax로 가져오는 페이지에 직접 요청을 보내거나
아니면 크롬드라이버 같은 별도의 브라우저 엔진을 돌려 값을 받아야 합니다

답변을 작성하시기 전에 로그인 해주세요.
전체 2
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT