스누피 클래스 사용법
본문
안녕하세요 스누피클래스를 이용해 한국금거래소에 텍스트들을 따올려고 하는데요. 아직 사용법을 잘 몰라서 그런지 원하는 부분이 출력이 안됩니다..ㅠㅠ ( https://www.koreagoldx.co.kr/main/html.php?agencyCode=&htmid=goods/gold_list.html ) 를 에 있는
여기 부분의 텍스트들을 가져올라는데 인터넷에 있는 스누피클래스 예제 코드 복붙해서 주소만 금거래소로 바꿔서 할려는데 전체적으로는 소스를 가져오는건 되는데 제가 원하는 부분만 가져오질 않네요.. 금거래소 사이트로 가면 저 테이블이
이렇게 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";
}
?>
example-table이라는 div안이 텅텅 비어있네요.. 초보자가 감히 의심하건데 저 example-table이라는 id를 가진 div가 채워지는게 ajax로 데이터를 받아와서 채워지는데 스누피클래스로 하면 데이터를 받기도 전에 다 긁어와버려서 제 홈페이지에서는 비어져 있는게 아닌가 싶네요..
이렇게 tabulator?라는 javascript 라이브러리인지 아닌지 모르겠는걸로 테이블을 만들고 ajax로 데이터들을 json객체로 받아서 테이블에 뿌려주는건데 어디로 ajax통신을 하냐를 찾아봤더니
여기로 post 방식으로 ajax 통신을 하고 lineUpVal이라는 json 객체로 받아오더군요. lineUpVal 이라는 객체는 어떤 정보가 들어있나 봤더니
이렇게 인덱스로 엄청 담겨 있고 눌러보면
여러가지 정보들이 담겨있는데 너무많아서 인덱스 하나에 들어있는 정보를 한 화면에도 못담네요.. 쨋든 결론은 저런식으로 홈페이지를 로드할때 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이라 데이터양이 상당하네요
따로 인증은 거치지 않는 오픈된 데이터 같습니다
ajax 등으로 표시되는 데이터는 일반적인 크롤링 프로그램으로 가져오기 어렵습니다
소스 분석을 하여 ajax로 가져오는 페이지에 직접 요청을 보내거나
아니면 크롬드라이버 같은 별도의 브라우저 엔진을 돌려 값을 받아야 합니다