Hiểu nôm na là một trang web có các phần tử khác nhau và bạn muốn lấy nội dung của 1 phần tử nào đó, giả sử giới hạn một bảng, thì chúng ta có thể dùng jQuery hay cURL để lấy nhưng với thư viện dưới đây, mọi thứ
Thư viện mà ta sẽ sử dụng là PHP Simple HTML DOM Parser. Đây là một thư viện được đánh giá khá cao với những tính năng hữu ích, đặc biệt là khả năng phân tích cú pháp dữ liệu rất tốt. Các bạn có thể tải xuống tại đây
1. Cách sử dụng
Cách sử dụng của thư viện này tương đối dễ dàng, nếu bạn quen với jQuery sẽ nắm bắt thư viện này nhanh hơn. Dưới đây là một ví dụ dễ hiểu để các bạn làm quen
php
// Thêm thư viện
include('../simple_html_dom.php');
// Lấy cấu trúc trang (DOM) từ URL hoặc file
$html = file_get_html('http://www.google.com/');
// Tìm tất cả link
foreach($html->find('a') as $e)
echo $e->href . ' ';
// Tìm tất cả link hình ảnh có trong trang web (thuộc tính src)
foreach($html->find('img') as $e)
echo $e->src . ' ';
// Tìm tất cả thẻ ảnh (bao gồm luôn tag )
foreach($html->find('img') as $e)
echo $e->outertext . ' ';
// Tìm tất cả thẻ div mà có id=gbar
foreach($html->find('div#gbar') as $e)
echo $e->innertext . ' ';
// Tìm tất cả thẻ span mà có class=gb1
foreach($html->find('span.gb1') as $e)
echo $e->outertext . ' ';
// Tìm tất cả thẻ td mà có thuộc tính align=center
foreach($html->find('td[align=center]') as $e)
echo $e->innertext . ' ';
// In nội dung có trong thẻ td đầu tiên mà có thuộc tính align=center
echo $html->find('td[align="center"]', 1)->plaintext.' ';
// In toàn bộ nội dung có trong trang web (chỉ có text, không có các thẻ tag)
echo $html->plaintext;
?>
Sau khi tải thư viện này về, giải nén thư mục, các bạn sẽ thấy rất nhiều ví dụ từ đơn giản đến phức tạp khi sử dụng thư viện này
2. Các phương thức (hàm) chính
Sau khi tìm hiểu và làm quen với một số ví dụ, tôi nhận thấy có các phương thức (hàm) chính sau đây
a. Tạo đối tượng phần tử trang (DOM)
// Create a DOM object from a string
$html = str_get_html('Hello!');
// Create a DOM object from a URL
$html = file_get_html('http://www.google.com/');
// Create a DOM object from a HTML file
$html = file_get_html('test.htm');
b. Find search section (phương thức quan trọng nhất)
Đó là hàm find(), function và cú pháp tương tự như function find() trong jQuery. Bạn có thể tìm tất cả các thẻ hoặc từng thẻ riêng biệt với các tham số thích hợp
// Find all anchors, returns a array of element objects
$ret = $html->find('a');
// Find (N)th anchor, returns element object or null if not found (zero based)
$ret = $html->find('a', 0);
// Find lastest anchor, returns element object or null if not found (zero based)
$ret = $html->find('a', -1);
// Find all
with the id attribute
$ret = $html->find('div[id]');
// Find all
HTML;
$html = str_get_html($str);
foreach($html->find('ul') as $ul) {
foreach($ul->find('li') as $li)
echo $li->innertext . ' ';
}
// Parsing checkbox
$str = <<HTML;
$html = str_get_html($str);
foreach($html->find('input[type=checkbox]') as $checkbox) {
if ($checkbox->checked)
echo $checkbox->name . ' is checked ';
else
echo $checkbox->name . ' is not checked ';
}
c. Truy xuất thuộc tính của đối tượng
// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');
// Find all images
foreach($html->find('img') as $element)
echo $element->src . ' ';
// Find all links
foreach($html->find('a') as $element)
echo $element->href . ' ';
Với ví dụ trên, bạn có thể thấy chúng hoàn toàn lấy được các thuộc tính của đối tượng (sau khi đã tìm kiếm) như thẻ thì chứa thuộc tính href hay thẻ có chứa thuộc tính src…
d. Đọc nội dung phần tử trang
văn bản rõ . Lấy nội dung (văn bản) từ trang web
văn bản bên trong . Chỉ lấy nội dung bên trong thẻ (tag), tương tự như function text() trong jQuery.
văn bản bên ngoài . Lấy thẻ và nội dung bên trong, tương tự như hàm html() trong jQuery.
e. Thao tác với các phần tử trang web
Với sự linh hoạt của các tính năng trên, bạn có thể thao tác với nội dung từng phần tử hoặc cả trang web với ví dụ dưới đây