크롤링에서요 script 에 아무런 데이타 값이 없을때는 어떻게 찝어야 하나요??
본문
답변 3
개발자 툴 - 네트웍 탭"에서 뭔가 찾아 봐야죠.
윗 이미지 meta 가 리스트 아닌가요. 이미지로 붙이지 마시고 전체 소스로 올리세요. 그래야 답변자가 테스트 해보고 답변이 가능할꺼 같은데요. 적어도 어떤 사이트의 리스트 주소라도 올려야 도움을 드릴 수 있을 듯 하네요.
우선 알려주신 주소가 리스트가 맞는지 모르겠습니다 VIEW 인거 같은데
거기에 var meta에 릴레이션 리스트를 뽑는거 같아서 그렇게 맞춰서 알려드립니다.
사실 여기가 맞는지도 알려주시지 않아서 예상한겁니다.
궁극적으로 정규식을 사용하면 좋겠으나 정규식 검증할 시간이 없어서 문자열을 컨트롤해서
테스트 했습니다. 다음부터는 질문하실때 소스 그리고 그소스의 어디부분의 정보를 가져오고 싶다.
구체적으로 질문해 주세요. 크롤링 못 하시면 회사에서 난처해 지시는거 같아서 시간 냈습니다.
function cUrlGetData($url, $post_fields = null, $headers = null) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
if ($post_fields && !empty($post_fields)) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
}
if ($headers && !empty($headers)) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
return $data;
}
function getInnerHTML($node){
$result = null;
$child = $node->childNodes;
if ($child->length<1) return null;
for ($i=0; $i<$child->length; $i++) {
$item = $child->item($i);
if (($item->nodeName=='#text') AND (strlen(trim($item->nodeValue))==0)) continue;
$tmp_doc = new DOMDocument();
$tmp_doc->formatOutput = true;
$tmp_doc->appendChild($tmp_doc->importNode($item, true));
$result .= $tmp_doc->saveHTML();
unset($tmp_doc);
}
return $result;
}
$post_fields = null;
$headers = [
'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.9',
'sec-ch-ua: "Google Chrome";v="87", " Not;A Brand";v="99", "Chromium";v="87"',
'sec-ch-ua-mobile: ?0',
'user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
];
$res = cUrlGetData("https://malbongolf.com/collections/new/products/malbon-x-jones-buckets-carry-bag-red",$post_fields,$headers);
$dom_obj = new DOMDocument();
@$dom_obj->loadHTML('<?xml encoding="utf-8" ?>'.$res);
$script_text = "";
foreach($dom_obj->getElementsByTagName('script') as $script) {
$script_text = getInnerHTML($script);
if(strpos($script_text, "var meta = ") !== false){
$script_text = explode("var meta = ", $script_text);
$script_text = explode("for (var attr in meta)", $script_text[1]);
$script_text = trim($script_text[0]);
$script_text = substr($script_text, 0, -1);
$script_text = json_decode($script_text, true);
break;
}
}
print_r($script_text);
답변을 작성하시기 전에 로그인 해주세요.