Home / Hỏi - đáp / Thiết kế website / Hướng dẫn sử dụng simple html dom để leech dữ liệu website

Hướng dẫn sử dụng simple html dom để leech dữ liệu website

Posted on

Thiết kế web Ninh Bình, SEO web Ninh Bình giới thiệu với các bạn Cách sử dụng simple html dom để leech dữ liệu của một website khác về. Trong bài này, mình sẽ hướng dẫn các bạn sử dung Simple html dom để lấy dữ liệu của trang web cmovieshd.com. Các bước thực hiện như sau:

Bước 1. Các bạn tạo ra 1 project mới có tên là htmldom trong thư mục htdocs để thực hiện

Bước 2. Các bạn tải file sinple_html_dom về và đưa vào thư mục project htmldom mà mình vừa tạo. Các bạn tải file sinple_html_dom về tại đây simple_html_dom

Bước 3. Các bạn tạo ra 1 table (mình đặt tên là cmovie) để chứa dữ liệu mà các bạn lấy (leech, craw) dữ liệu về nhé. Table của mình gồm có các trường dữ liệu sau đây:

simple html dom cmovieshd
simple html dom cmovieshd

Bước 4. Bây giờ chúng ta bắt tay vào code nhé,,,hihi. Trước khi code các bạn hãy Viewsource của trang chủ, trang single và trang xem phim của cmovieshd.com để xem các thẻ của các trường thông tin mà mình lấy về nhé. Tiến hành code thôi nào.

– Tạo file _dbconfig.php trong thư mục của mình để kết nối tới cơ sở dữ liệu ở trên mà mình tạo có nội dung như sau:


<?php
$db_host = "localhost"; // Giữ mặc định là localhost
$db_username = "root"; //Can thay doi theo username truy cap MySQL
$db_password = "";//Can thay doi theo mat khau truy cap MySQL
$db_name = "post-seo";// Can thay doi theo ten ban tao cho database
$conn=mysql_connect($db_host, $db_username, $db_password) or die("Không thể kết nối đến MySQL server");
mysql_query("SET character_set_results=utf8", $conn);
mb_language('uni');
mb_internal_encoding('UTF-8');
$result=mysql_select_db($db_name) or die("Database không tồn tại. Có thể database chưa được tạo!");
mysql_query("set names 'utf8'",$conn);
?>

– Sau đó chúng ta tạo file leech_cmovieshd.php có nội dung như sau: Các bạn có thể tải về tại đây: leech-cmovie

Trong file trên các bạn cần chú ý như sau:

– Để lấy source của một link nào đó, ví dụ: http://cmovieshd.com thì ta gọi hàm file_get_html, ví dụ ta đặt:

$html= file_get_html(‘http://cmovieshd.com’);

– Để lấy đường link của thể a (tức là thuộc tính href) thì ta lấy như sau:

$link= $html->find(‘a’,0)->href; //trong đó chỉ số 0 chỉ ra lấy thẻ a đầu tiên của $html, còn ->href để lấy thuộc tính href của thẻ a

– Ví dụ ta có khối html sau trong biến $html:

<div class=”item”>

<a href=”http://cmovieshd.com/post-1″ title=”Video 1″>Video 1 title</a>

</div>

thì để lấy được các thông tin của thẻ a ta sẽ tiến hành như sau:

$x1= $html->find(‘div.item a’,0);

$link= $x1->href; //để lấy link của thẻ a trỏ vào

$title= $x1->title; //để lấy được title của thẻ a là Video 1

$intext= $x1->innertext; //sẽ lấy được cái anchor của thể a là Video 1 title

– Với thẻ img trong simple_html_dom thì cũng làm tương tự như thẻ a. Ví dụ ta có đoạn html như sau:

<div class=”item”>

<a href=”http://cmovieshd.com/post-1″ title=”Video 1″>Video 1 title</a>

<a href=”http://cliphi.net/movies-1″ title=”Watch movies free online”>

<img class=”thumb-movies” src=”http://cliphi.net/thumb-movies1.jpg” alt=”Movie 1″/>

</a>

</div>

Để lấy được ảnh thumbnail của movie này ta sẽ xử lý như sau:

– $x1= $html->find(‘div.item a’,1);//chỉ số a là 1, tức là cái link a thứ 2 trong khối lệnh <div class=”item”>

– $x2= $x1->find(‘img’,1);

– $x2->src;//sẽ lấy được ảnh thumbnail

– $x2->alt;//sẽ lấy được thuộc tính alt của thẻ image

Hoặc có thể tổ hợp các câu lệnh để lấy được luôn các giá trị trên bằng câu lệnh là:

– $src= $html->find(‘div.item a’,1)->find(‘img’,0)->src;

– $alt= $html->find(‘div.item a’,1)->find(‘img’,0)->alt;

* Chú ý: Thông thường chúng ta sử dụng các lệnh cơ bản như trên là có thể lấy được hết các thông tin. Tuy nhiên trong nhiều trường hợp thông tin chúng ta cần lấy lại nằm trong các thuộc tính do coder thêm vào thì ta sẽ làm như thế nào? Ví dụ. Ta có khối lệnh html trong biến $item như sau:

<a class=”ml-mask” href=”http://cliphi.net”>

<img data-original=”Thuộc tính data-original” tab=”info” class=”img-thumb” src=”http://cliphi.net/movies.jpg” alt=”Movies Online”/>

</a>

Sử dụng simple_html_dom để lấy các thuộc tính của thẻ img ở trên ta làm như sau:

  • $t= $item->find(‘a.ml-mask img’,0);
  • $t->getAllAttributes(); //get tất cả các thuộc tính của thẻ img mà lưu trong $t
  • $tt= $t->attr[‘data-original’]; //ta lấy được thuộc tính “data-original” của thẻ img
  • $info=$t->attr[‘tab’]; //ta sẽ lấy được thuộc tính tab của thẻ img

Kết luận: Bằng những kỹ thuật trên đây khi sử dụng simple_html_dom các bạn hoàn toàn lấy được dữ liệu của một website bất kỳ về cơ sở dữ liệu của mình. Hy vọng bài viết này sẽ giúp ích cho các bạn khi sử dụng simple_html_dom nhé.

 

Top