Goutte Crawler 문의

Goutte Crawler 문의

QA

Goutte Crawler 문의

본문

안녕하세요.

 

뉴질랜드 도서관 한글 장서를 정리하고 있습니다.

오클랜드 도서관의 한글 장서는 잘 긁어오는데요, 크라이스트처치의 장서는 방식이 조금 달라서 애를 먹고 있네요.

 

아래 url으로 가면 html문서의 마지막 부분에 script로 json 문서가 들어 있는데, 거기에 도서 정보가 가지런히 들어 있거든요.

그걸 이용하려고 아래 코드를 만들었는데, 왠지 모르지만 25개 중에서 10개만 가져옵니다.

 

제가 무엇을 놓친 것인지 알수 없어서 도움을 구합니다.

 

운영되는 환경은 bookcafe.co.nz 입니다.

 


use Goutte\Client;
$client = new Client();
$searchUrl = "https://christchurch.bibliocommons.com/v2/search?custom_edit=false&query=isolanguage%3A%22kor%22%20available%3A%22%5B*%20TO%20*%5D%22%20formatcode%3A(BK%20)%20pubyear%3A%5B2015%20TO%202015%5D&searchType=bl&suppress=true&pagination_page=14&page=7";
 
$crawler = $client->request('GET', $searchUrl);
 
$chch_json = $crawler->filterXpath('//script[@type="application/json"]')->text();
$R = json_decode($chch_json, true);
 
//echo "<pre>"; print_r($R);echo "</pre>";
$chchBooks = $R['entities']['bibs'];
 
$book= array();
$i = 0;
foreach ($chchBooks as $key) {
    if (isset($key['briefInfo']['isbns']['0'])) $isbn = $key['briefInfo']['isbns']['0']; else $isbn = "N/A";
    $book[$i]['no'] = $key['id'];
    $book[$i]['isbn'] = $isbn;
    $i++;
}

 

여기까지 앍어주셔셔 감사합니다.

 

도움을 주실 분께는 더 많은 감사를..,,,

이 질문에 댓글 쓰기 :

답변 2

안녕하세요? ^^

올려주신 URL을 통해서는 10개씩 서적의 리스트를 볼 수 있는 것으로 확인됩니다.

브라우저에서 보기 방식을 List view 또는 Cover view로 변경하시면

URL이 바뀌지 않으면서 10개가 아닌 25개씩 리스트하는 페이지로 바뀝니다.

이는 소위 '동적 웹페이지' 방식으로 작동하는 것으로 보입니다.

 

개발자도구에서 살펴보면 아래 URL로 POST 전송을 하여 JSON으로 데이터를 받아오는 것을 확인할 수 있습니다.

https://gateway.bibliocommons.com/v2/libraries/christchurch/bibs/search?locale=en-CA

25개씩 데이터를 받고 싶으시다면 위 URL로 적절한 headers와 formdata를 넣어 POST 전송을 한 후 전송받은 JSON을 파싱하시면 됩니다.

 

그럼 작업을 잘 마무리하시기를 기원합니다 :)

script내에서도 10개밖에 없는것으로 보이네요

25개를 가져오는 부분이 없는데 왜 25개를 가져온다고 보시는건가요?

스크립트나 코드가 잘못된것은 없고, 사이트에서 10개만 나옵니다

살펴주셔셔 감사합니다.
$searchUrl 으로 접근해서 나오는 html 문서의 script 중에 type="application/json"인 내용을 들여다보면 즉 /html/body/script[1]/text() 를 보면 briefInfo값이 25개를 찾을 수 있거든요.
그런데 $R 에는 10개만 보이거든요.

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

회원로그인

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