[PHP] Cách lấy giữ liệu từ trang khác bằng thư viện PHP Simple HTML DOM Parser

Đăng bởi: Admin | Lượt xem: 4198 | Chuyên mục: PHP

Trong bài viết này vncoder.vn sẽ giới thiệu đến các bạn một thư viện rất phổ biến, đó là thư viện PHP Simple HTML DOM Parser. Thư viện này giúp chúng ta có thể lấy được toàn bộ dữ liệu có trong trang Web mà bạn muốn lấy dữ liệu. Cùng vncoder.vn tìm hiểu nhé.


1. Giới thiệu về PHP Simple HTML DOM Parser

Hiểu đơn giản PHP Simple HTML DOM Parser là một thư viện có chức năng chính là trích xuất nội dung HTML từ một trang nào đó hoặc một đoạn HTML do do bạn tự cung cấp, nó hỗ trợ một số tính năng như:

  • Hỗ trợ bóc tách dữ liệu theo từng id, class, hoặc thẻ img, a, table, p...

  • Code ngắn, dễ học, dễ viết, dễ nhớ.

  • Khá nhẹ nhưng cũng rất hữu dụng.

2. Hướng dẫn tải về và sử dụng PHP Simple HTML DOM Parser

Để tải về thư viện này bạn có thể nên trang chủ của nó tại địa chỉ sau http://simplehtmldom.sourceforge.net để down về.

Sau khi đã có thư viện bạn copy file simple_html_dom.php vào dự án của mình và include nó vào file bạn muốn lấy dữ liệu để có thể sử dụng.

Tiếp theo chúng ta cùng điểm qua một số ví dụ về việc lấy dự liệu với thư viện này nhé.

Để đọc nội dung một file ta dùng như sau.

$html = file_get_html('link cần lấy');
echo $html;

Bây giờ chúng ta có thể chạy thử để xem kết quả. Rất đơn giản phải không nào chỉ cần một dòng code là bạn đã có thể echo ra toàn bộ nội dung HTML của một trang web rồi. Và chúng ta cùng tìm hiểu tiếp về cách bóc tách dữ liệu bằng thư viện này rồi nhé nhé.

Hiển thị tất cả các ảnh từ trang cần lấy sang web mình.

$html = file_get_html('http://www.google.com/');
foreach($html->find('img') as $element) {
       echo '<img src="'.$element->src.'" /><br>';
}

Lưu ý biến $html  bạn chỉ cần khai báo một lần trong file nhé, và ở các ví dụ sau mình sẽ không gọi lại nó nữa mà mặc định là chúng ta đã khai báo nó rồi.

Hiển thị tất cả các link trong bài viết.

foreach($html->find('a') as $element) 
       echo $element->href . '<br>';

Lấy nội dung từ một id cụ thể.

$noidung = $html->find('#ten_id',0);

Ở đoạn code này có chèn số 0 vì trong html find sẽ trả về dữ liệu dạng mảng nếu bạn không truyền 0 vào thì bạn sẽ cần cho nó vào vòng lặp để hiển thị nội dung ra. Con khi truyền số 0 vào đằng sau thì chương trình sẽ chỉ lấy nội dung trong id đầu tiên.

Đối với class chúng ta cũng làm tương tự như sau, giả sử trong file cần lấy có 3 class tên là content. Và chúng ta muốn lấy nội dung từ class content thứ hai thị bạn làm như sau

$noidung = $html->find('.content',1);

Tiếp theo chúng ta cùng tìm hiểu cách lấy phần tử trong một phần tử. Ví dụ cụ thể như sau trong nội dung file cần lần có một id tên là properties. Trong  properties có một đoạn text và một list danh sách thuộc tính nằm trong thẻ li. Bây giờ bạn cần lấy ra chuỗi li đấy để đưa vào dữ liệu hoặc xuất ra website thì làm như sau.

$thuoctinh =  $html->find('#properties',0)->find('li');
foreach ($thuoctinh as $e) {
    echo $e->plaintext
};

Mục đích của ví dụ này để bạn hiểu về cách dùng find lồng từ đó có thể áp dụng vào các ví dụ cụ thể.

Lưu ý: trong thư viện này có hỗ trợ ta ba cách đọc nội dung như sau

  • plaintext: Lấy nội dung (text) từ trang web
  • innertext: Chỉ lấy nội dung bên trong thẻ..
  • outertext: Lấy cả thẻ và nội dung bên trong.

Tiếp theo chúng ta cùng tìm hiểu về cách thay đổi nội dung của một trang trước khi xuất dữ liệu ra. Giả sử bạn có một trang trong đó có 3 table với những nội dung khác nhau, bạn muốn xóa table đầu tiên đi do có chứa thông tin không cần thiết thì làm như sau:

$html->find('table',0)->outertext='';

Khi cần xóa một phần từ nào đó thi gán outertext = '' như ở trên là đươc. Chúng ta làm tương tự với các class id. Giờ trường hợp đặt ra là bạn xóa một đoạn text nằm trong một thẻ p nhưng oái oăm thay thẻ p này không có tên class hoặc id mà chỉ có style như sau <p style="font-family:宋体;'>. Đây là mình lấy từ ví dụ thực tế của mình khi làm dự án đầu tiên của mình.Lúc này ta cần làm như sau để loại text,

foreach ($html->find('p[style="font-family:宋体;"]') as $e) {          
    $e->outertext = '';
}

Như thế nếu bạn echo $html thì nội dung của chúng ta sẽ chưa được sửa đổi, cần thêm một bước này nữa trước khi xuất dữ liêụ ra.

$html ->load($html ->save());

3. Kết luận

Ở trên vncoder.vn vừa giới thiệu đến các bạn cách lấy dữ liệu với thư viện HTML DOM Parser, hy vọng qua bài này bạn có thêm những lựa chọn cho mình khi lấy dữ liệu từ website khác. Chúc bạn thành công!.

4. Xem thêm

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: PHP

Xây dựng Website PHP theo MVC
Số bài học:
Lượt xem: 28082
Đăng bởi: Admin
Chuyên mục: PHP

Học lập trình PHP cơ bản
Số bài học:
Lượt xem: 19229
Đăng bởi: Admin
Chuyên mục: PHP