Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > สอบถามวิธีการดึงข้อมูลเฉพาะส่วนจาก Website แบบตั้งเวลาดึง



 

สอบถามวิธีการดึงข้อมูลเฉพาะส่วนจาก Website แบบตั้งเวลาดึง

 



Topic : 093066



โพสกระทู้ ( 86 )
บทความ ( 0 )



สถานะออฟไลน์




ต้องการดึงข้อมูลจาก www.su.ac.th/html_news/all_news.asp โดยแต่ละหมวดจะมีข่าวย่อยๆลงไป

โดยต้องการดึงข้อมูลเนื้อหาข่าว และ Link ของข่าว โดยให้ Check ว่าแต่ละข่าวอยู่ในหมวดไหนบ้าง เพื่อเก็บลง Database

และต้องการให้มีการดึงข้อมูลแบบ Auto โดยตั้งเวลาในการดึงข้อมูลอะค่ะ

แนะนำด้วยนะค่ะ ตอนนี้ดึงออกมาได้ แต่ยังไม่ Check ว่าอยู่ในหมวดไหนบ้าง และยังไม่ Auto

ขอบคุณมากๆค่ะ



Tag : PHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-03-27 22:04:51 By : Monkey_CONAN View : 2022 Reply : 10
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ใช้ Query 2 Loop น่ะครับ Loop แรกเป็นหมวดหมู่ และแต่ล่ะหมวดหมู่ก็ Loop ข่าวออกมาแต่ล่ะรายการครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-28 06:21:10 By : mr.win
 


 

No. 2



โพสกระทู้ ( 86 )
บทความ ( 0 )



สถานะออฟไลน์


Code (PHP)
?php
     include('C:\AppServ\www\simple_html_dom.php');
     
 $html = file_get_html('http://www.su.ac.th/html_news/all_news.asp'); //ดึงมาทุกหมวด
 foreach($html->find('td[class=ms11search]') as $e)  //ช่วงนี้ใช้ค้นหาหมวดหมู่ในCode
 echo $e->innertext.'<br>';
   
    $html = file_get_html('http://su.ac.th/html_news/news_01.asp'); //ต้องการให้ดึงหัวข้อมาแต่โค้ดยังไม่แสดงการดึงหัวข้อข่าว
    
	echo $html;
    foreach($html -> find('td class=ms09search') as $s) //ช่วงในการค้นหาหัวข้อข่าว
    echo $s ->innertext.'<br>';

  
    $urlWithoutProtocol = "http://su.ac.th/html_news/news_template.asp?id=5775"; //linkของข่าวที่ต้องการนำมาสกัด
    $request         = "";
    $isRequestHeader = false;
 
    $exHeaderInfoArr   = array();
    $exHeaderInfoArr[] = "Content-type: text/xml";
    $exHeaderInfoArr[] = "Authorization: "."Basic ".base64_encode("authen_user:authen_pwd");
 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $urlWithoutProtocol);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_HEADER, (($isRequestHeader) ? 1 : 0));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if( is_array($exHeaderInfo) && !empty($exHeaderInfo) )
    {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $exHeaderInfo);
    }
    $response = curl_exec($ch);
    curl_close($ch);
	$html = str_get_html($response);
    $elem = $html->find('table td.ms09', 0)->plaintext;

    echo $elem; 
 
   //echo $response;
?>


เขียนออกมาประมาณนี้จะ Loop ยังไงได้บ้างค่ะ

ขอบคุณมากค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-31 22:01:15 By : Monkey_CONAN
 

 

No. 3



โพสกระทู้ ( 86 )
บทความ ( 0 )



สถานะออฟไลน์


สอบถามหน่อยนะค่ะ

จากโค้ดด้านบน จะดึงข้อมูลเป็น 2 loop ยังไงค่ะ
โค้ดด้านบนเป็นการดึงหมวดหมู่มาทั้งหมด
แล้ว loop ที่ใช้สำหรับการเจาะเข้าไปในการดึงข้อมูลด้านในของแต่หละหมวด
ต้องเขียนยังไงอะค่ะ

รบกวนแนะนำด้วยค่ะ

ขอบคุณค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-18 19:46:53 By : Monkey_CONAN
 


 

No. 4



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

Code (PHP)
<ul>
<?php
include('simple_html_dom.php');
$html = file_get_html('http://www.su.ac.th/html_news/all_news.asp');
foreach($html->find('td[class=ms11search] > a') as $a) {
	$text = strip_tags($a->innertext);
	echo "<li>$text ($a->href)<ul>";
	if (($page = @file_get_html("http://www.su.ac.th/html_news/$a->href"))) {
		foreach($page->find('td[class=ms09] > a') as $a) {
			$text = strip_tags(iconv('TIS-620', 'UTF-8', $a->innertext));
			echo "<li>$text ($a->href)</li>";
		}
	}
	echo '</ul>';
}
?>
</ul>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-18 22:14:53 By : cookiephp
 


 

No. 5



โพสกระทู้ ( 86 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากค่ะ

สอบถามเพิ่มเติม ถ้าเราไม่ Hard code ว่าลิงค์ก่อนหน้าคืออะไร
เราจะรู้ได้ยังไงอะคะว่าก่อนหน้า ของ news_01.asp คือ su.ac.th/html_news. และ
ก่อนหน้าลิงค์ ../html_news/news_template.asp?id=6422 > '..' นั่นคือ su.ac.th
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-18 22:30:23 By : Monkey_CONAN
 


 

No. 6



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

หลักการคือหา base url ของหน้าที่โหลดมา โดยหา tag <base> ก่อน
ถ้าไม่มี tag <base> ก็ต้องตัด uri สุดท้ายออกเช่น
http://www.su.ac.th/html_news/all_news.asp
ก็ตัด all_news.asp ออกให้เหลือ http://www.su.ac.th/html_news/ ก็จะได้ base url
และเราจะต้องตรวจสอบให้ได้ว่าลิงก์ใดใดก็ตามที่อยู่ในหน้านั้นๆ เป็นมันเป็น relative url หรือ absolute url
หากเป็น relative url เราก็เอา href มาเชื่อมกับ base url ของหน้าปัจจุบันครับ

เช่น
href="new_01.asp" นี่คือ relative url
href="../html_news/news_template.asp?id=6422" นี่ก็คือ relative url

ถ้าถามว่าใช้อะไรในการตรวจสอบที่กล่าวมา ก็คงต้องเป็น regular expression ครับ
และถ้าขอตัวอย่างต่ออีก คงบอกว่า รอก่อนครับ
เอาไว้มีเวลาจะเขียนให้ดูครับ เพราะมันค่อนข้างซับซ้อนและใช้เวลาครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-18 23:12:47 By : cookiephp
 


 

No. 7



โพสกระทู้ ( 1,819 )
บทความ ( 20 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Facebook

แต่ว่ากันตามจริง มันไม่มีทางที่จะทำอะไรอัตโนมัติได้ขนาดนั้นหรอกครับ
ขนาดการหาลิงก์ เรายังต้องอ้างอิงคลาสของ <td> เลย
ถ้าสักวันนึง หน้านั้นเปลี่ยนการแสดงผล ไม่ใช้ <td class="ms11search">
โค้ดข้างบนก็ใช้ไม่ได้แล้วครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-18 23:14:28 By : cookiephp
 


 

No. 8



โพสกระทู้ ( 86 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณสำหรับคำแนะนำนะค่ะ
รบกวนถ้าว่าง ขอตัวอย่างด้วยค่ะ

ระหว่างนี้จะลองศึกษาเพิ่มเติม

ขอบคุณค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-18 23:51:49 By : Monkey_CONAN
 


 

No. 9



โพสกระทู้ ( 86 )
บทความ ( 0 )



สถานะออฟไลน์


รบกวนนิดนึงคะตอนนี้เกิดปัญหา error
Warning: file_get_contents(http://[email protected]) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

จาก code

Code (PHP)
<ul>
<?php
include('simple_html_dom.php');
$html = file_get_html('http://www.su.ac.th/html_news/all_news.asp');
foreach($html->find('td[class=ms11search] > a') as $a) {
	$text = strip_tags(iconv('TIS-620', 'UTF-8', $a->innertext));
	echo "$text $a->href <br>";
	if (($page = @file_get_html("http://www.su.ac.th/html_news/$a->href"))) {
		foreach($page->find('td[class=ms09] > a') as $a) {
			$text = (iconv('TIS-620', 'UTF-8', $a->innertext));
		echo "<li>$text ($a->href)</li>";
			$link = $a->href;
	//	 preg_match_all
	//	( '/\<a href\="(\.\.\/html_news\/news_template\.asp\?id\=\d+)"\>([^\<]+)\</', $link, $link_2, PREG_SET_ORDER ) ;
			
		
			$result = str_replace(".." ,"", $link);

			$link_2 = "http://www.su.ac.th/$result";
			echo $link_2;
			$link_3 = str_get_html($link_2);
			
			 $request         = "";
			 $isRequestHeader = false;
			 $exHeaderInfoArr   = array();
			 $exHeaderInfoArr[] = "Content-type: text/xml";
			 $exHeaderInfoArr[] = "Authorization: "."Basic ".base64_encode("authen_user:authen_pwd");
			 $ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $urlWithoutProtocol);
			curl_setopt($ch, CURLOPT_POST, 1);
			curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
			curl_setopt($ch, CURLOPT_HEADER, (($isRequestHeader) ? 1 : 0));
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			if( is_array($exHeaderInfo) && !empty($exHeaderInfo) )
				{
					curl_setopt($ch, CURLOPT_HTTPHEADER, $exHeaderInfo);
				}
			$response = curl_exec($ch);
			curl_close($ch);
			$link_3 = file_get_html($link_2);
			$link_4 = strip_tags($link_3->find('table td.ma09linespace', 0)->innertext);
			echo $link_4 .'<br>';
			echo $response;
			ini_set('memory_limit', '512M'); //ปรับขนาดที่ต้องการจนกว่ามันจะไม่ error
			ini_set('max_execution_time', '60'); //อันนี้แถมเผื่อเวลาโปรเซสไม่พอ
			
	
	}
	}
	

	echo '</ul>';
}
?>
</ul>


จะสามารถสร้างเงื่อนไขยังไงได้บ้างคะ ว่าถ้าเจอเหตุการณ์ Error ด้านบนให้ข้ามไปทำงานต่อไป
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-19 12:40:11 By : Monkey_CONAN
 


 

No. 10



โพสกระทู้ ( 86 )
บทความ ( 0 )



สถานะออฟไลน์


รบกวนช่วยดูโค้ดนี้ให้หน่อยค่ะ

Code (PHP)
<ul>
<?php
	ini_set('memory_limit', '512M'); //ปรับขนาดที่ต้องการจนกว่ามันจะไม่ error
	ini_set('max_execution_time', '400'); //อันนี้แถมเผื่อเวลาโปรเซสไม่พ

include('simple_html_dom.php');
include('connect-1.php');
include('connect.php');
$html = file_get_html(WEB_URL."/html_news/all_news.asp");
$type_id = 0;
foreach($html->find('td[class=ms11search] > a') as $a) 
{
	$type_id++;
	$head =  strip_tags($a->innertext);
	echo "<li> $head($a->href)<ul>"; 
	echo $type_id;
if (($page = @file_get_html(WEB_URL."/html_news/{$a->href}"))) 
		{
				foreach($page->find('td[class=ms09] > font > a') as $page_a) 
					{
						$text_1 = strip_tags(iconv('TIS-620', 'UTF-8', $page_a->innertext));
						echo "<li> $text_1 ($page_a->href)</li>";
						$page_a->href = str_replace(".." ,"", $page_a->href);
						//echo $page_a->href; 

						if(($news = @file_get_html(WEB_URL."/{$page_a->href}")))
							{
								$url = WEB_URL."/{$page_a->href}";
							        $u = parse_url($url);
							        parse_str($u['query'], $p); 
								$newsid = $p['id'];
								echo $newsid;
								foreach($news->find('td[class=ma09linespace] > font') as $news_a)
									
								{
									$news_name = strip_tags(iconv('TIS-620', 'UTF-8', $news_a->innertext));
									echo $news_name ."<br>";
									


								}
							
							
							
							}
					}
		}
		
	echo '</ul>';

}	

// mysql_close();
?>
</ul>


คือ ตรงส่วน โค้ด

Code
foreach($news->find('td[class=ma09linespace] > font') as $news_a)
{
$news_name = strip_tags(iconv('TIS-620', 'UTF-8', $news_a->innertext));
echo $news_name ."<br>";
}


คือช่วงค้นหาข้อมูลข่าว แต่สิ่งที่คือ บางข่าวมีลักษณ์ class 'td[class=ma09linespace] > font' จริงแต่ถ้าไปเจอข่าวไหนที่มี Class รูปแบบนี้ 'td[class=ma09linespace] > font > p' ข้อมูลข่าวจะไม่ออกมาอะค่ะ

จะเขียนยังไงให้สามารถดึงได้ทั้ง 2 แบบ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-05-21 22:39:30 By : Monkey_CONAN
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามวิธีการดึงข้อมูลเฉพาะส่วนจาก Website แบบตั้งเวลาดึง
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่