답변 3개
채택된 답변
+20 포인트
답변에 대한 댓글 1개
G
GST1
3년 전
넵 감사드립니다.
댓글을 작성하려면 로그인이 필요합니다.
3년 전
우선 알려주신 주소가 리스트가 맞는지 모르겠습니다 VIEW 인거 같은데
거기에 var meta에 릴레이션 리스트를 뽑는거 같아서 그렇게 맞춰서 알려드립니다.
사실 여기가 맞는지도 알려주시지 않아서 예상한겁니다.
궁극적으로 정규식을 사용하면 좋겠으나 정규식 검증할 시간이 없어서 문자열을 컨트롤해서
테스트 했습니다. 다음부터는 질문하실때 소스 그리고 그소스의 어디부분의 정보를 가져오고 싶다.
구체적으로 질문해 주세요. 크롤링 못 하시면 회사에서 난처해 지시는거 같아서 시간 냈습니다.
</p>
<p>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;
}</p>
<p>
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);
}</p>
<p> return $result;
}</p>
<p>$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("<a href="https://malbongolf.com/collections/new/products/malbon-x-jones-buckets-carry-bag-red",$post_fields,$headers);" target="_blank" rel="noopener noreferrer">https://malbongolf.com/collections/new/products/malbon-x-jones-buckets-carry-bag-red",$post_fields,$headers);</a></p>
<p>
$dom_obj = new DOMDocument();
@$dom_obj->loadHTML('<?xml encoding="utf-8" ?>'.$res);</p>
<p>$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;
}
}</p>
<p>print_r($script_text);</p>
<p>
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
