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개만 나옵니다