สอบถามเรื่องการใช้งาน DOM

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามเรื่องการใช้งาน DOM

สอบถามเรื่องการใช้งาน DOM
สอบถามเรื่องการเขียน DOM หน่อยครับ
 
ผมเขียนโค๊ดเพื่อจะดึงข้อมูลจากเว็บมาแบบนี้
 
$DOM = new DOMDocument('1.0','utf-8');
$DOM->loadHTML('<meta http-equiv="content-type" content="text/html; charset=utf-8">'.$str);
 
$items = $DOM->getElementsByTagName('div');
 
for ($i = 0; $i < $items->length; $i++){
   
echo $items->item($i)->nodeValue."<br/>";   
      
}
 
****ข้อมูลใน $str****
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 1</a> 
</div>
</div>
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 2</a> 
</div>
</div>
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 3</a> 
</div>
</div>
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 4</a> 
</div>
</div>
 
<div class="pin-item">
        <div class="pin-title">
<a href="/topic/32602481" target="_blank">ทดสอบ ปักหมุด 5</a> 
</div>
</div>
 
<div class="post-item  ">
    <div class="post-item-type">
<span class="icon-mini-posttype icon-mini-posttype-que grayscale"></span>
</div>
    <div class="post-item-title">
<a target="_blank" href="/topic/32620943">ทดสอบโพสที่ 1</a>
</div>
    <div class="post-item-by">
<span class="by-name">สมาชิกหมายเลข 1061414</span> - <span class="timestamp"> <abbr class="timeago" data-utime="09/24/2014 09:58:31" title="24 กันยายน 2557 เวลา  09:58:31 น."></abbr> </span>
    </div>
    <div class="post-item-footer">
<div class="post-item-taglist">
<div class="tag-item "> <a class="tag-title" href="/tag/น้ำมันเครื่อง" target="_blank"> 
<span data-tag="น้ำมันเครื่อง"> <em>น้ำมันเครื่อง</em> </span> </a> 
</div>
<div class="tag-item "> 
<a class="tag-title" href="/tag/รถยนต์" target="_blank"> <span data-tag="รถยนต์"> <em>รถยนต์</em> </span> </a> 
</div>
</div>
     </div>
</div>
 
*************************
แบบนี้อะครับ
ผลออกมาคือ มันออกข้อมูลทุกอย่างมาเลย
 
ทดสอบ ปักหมุด 1
ทดสอบ ปักหมุด 2
ทดสอบ ปักหมุด 3
ทดสอบ ปักหมุด 4
ทดสอบ ปักหมุด 5
ทดสอบโพสที่ 1
 
ถ้าผมจะกรองโดยแยกตามคลาส
class="pin-item"
แล้วเก็บ a href ไว้ใช้งานด้วย
ต้องทำยังไงอ่าครับ 
ลองมาหลายวิธีละ งง มาก 
รบกวนด้วยครับ


ืnickson 24-09-2014 11:09:55

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 11
permission ผมเป็น 644 อ่าคับ
ต้องเปลี่ยนเป็นอะไรรึเปล่าคับ


ืnickson 24-09-2014 15:43
 ความคิดเห็นที่ 12
ลองเอาโค้ดนี้ใส่ไฟล์ test2.php ดู แล้วแจ้งผล

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Din</title>
</head>
<body>
<?php
include("simple_html_dom.php");
// Create a DOM object from a URL
echo 'Current PHP version: ' . phpversion();
$html = file_get_html('http://dev-activity.com/DOM/testurl.htm');
echo "<br>";
echo $html;
$ret = $html->find('div.pin-title a');
foreach($ret as $v){
		echo $v."<br>";
}
?>
</body>
</html>


ninenik 24-09-2014
 ความคิดเห็นที่ 13
http://dev-activity.com/DOM/test2.php

Current PHP version: 5.3.13

ครับ


ืnickson 24-09-2014 15:59
 ความคิดเห็นที่ 14
ผิดๆ โค้ดตัวนี้แทน ลองใหม่อีกที

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Din</title>
</head>
<body>
<?php
include("simple_html_dom.php");
// Create a DOM object from a URL
echo 'Current PHP version: ' . phpversion();
$html = file_get_contents('http://dev-activity.com/DOM/testurl.htm');
echo "<br>";
echo $html;
?>
</body>
</html>


ninenik 24-09-2014
 ความคิดเห็นที่ 15
http://dev-activity.com/DOM/test2.php

Current PHP version: 5.3.13

ครับ


ืnickson 24-09-2014 16:05
 ความคิดเห็นที่ 16
<?php header('Content-Type: text/html; charset=utf-8'); ?>

<?php
// you can add anoother curl options too
// see here - http://php.net/manual/en/function.curl-setopt.php
function get_dataa($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}



$variableee = get_dataa('http://dev-activity.com/DOM/testurl.htm');
//echo $variableee;
echo "****************************START****************************"."<br>";
$str = $variableee;
$DOM = new DOMDocument('1.0','utf-8');
   $DOM->loadHTML('<meta http-equiv="content-type" content="text/html; charset=utf-8">'.$str);

  $items = $DOM->getElementsByTagName('div');
//$ret = $items ->find('div[class="post-item-title"'); 
//echo $ret."<br/>";  
   for ($i = 0; $i < $items->length; $i++){
   
echo $items->item($i)->nodeName. " - " .$items->item($i)->nodeValue."<br/>";   
      
        }
echo "****************************STOP****************************"."<br>";
?>

แบบนี้ได้ ตาม 

http://dev-activity.com/DOM/test1.php
แต่ผมจะหาด้วยคลาสไม่ได้อะครับ


ืnickson 24-09-2014 16:12
 ความคิดเห็นที่ 17
โอเค รู้สาเหตแล้ว

server เขาปิดฟังก์ชั่นดึงไฟล์ file_get_contents

ทำให้ไม่มีข้อมูลมาแสดง ต้องลองใช้ curl ดู

ใช้โค้ดนี้ทดสอบดูอีกที

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Din</title>
</head>
<body>
<?php
include("simple_html_dom.php");
// Create a DOM object from a URL
echo 'Current PHP version: ' . phpversion();
$url="http://dev-activity.com/DOM/testurl.htm";
$ch = curl_init($url);  
curl_setopt($ch, CURLOPT_HEADER, false);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
$html = curl_exec($ch);
curl_close($ch);  
echo $html;
?>
</body>
</html>


ninenik 24-09-2014
 ความคิดเห็นที่ 18
http://dev-activity.com/DOM/test2.php

Yesssssssssssssssssssssssssssssssssssssss

ได้แล้วครับ
ขอบคุณมากกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก
ผมหาหลายวันมากเลย
ขอบคุณครับ



ืnickson 24-09-2014 16:23
 ความคิดเห็นที่ 19
อืม ใช้ตัวอย่างนี้ดูได้เลย

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Din</title>
</head>
<body>
<?php
include("simple_html_dom.php");
// Create a DOM object from a URL
$url="http://dev-activity.com/DOM/testurl.htm";
$ch = curl_init($url);  
curl_setopt($ch, CURLOPT_HEADER, false);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
$html = curl_exec($ch);
curl_close($ch);  


$html_obj = str_get_html($html);
$ret = $html_obj->find('div.pin-title a');
foreach($ret as $v){
		echo $v."<br>";
}
?>
</body>
</html>


ninenik 24-09-2014
 ความคิดเห็นที่ 20

แต่ยังใช้กับ

  1. $ret = $html->find('div.pin-title a');  
  2. foreach($ret as $v){  
  3.         echo $v."<br>";  
  4. }


ไม่ได้อะครับ
 


ืnickson 24-09-2014 16:25






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ