Str_get_html

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
which attribute id=foo $ret = $html->find('div[id=foo]'); // Descendant selector $str = <<
"foo bar">ok
HTML; $html = str_get_html($str); echo $html->find('div div div', 0)->innertext . '
'
; // result: "ok" // Nested selector $str = <<
    "ul1">
  • item:1
  • item:2
    "ul2">
  • item:3
  • item:4
HTML; $html = str_get_html($str); foreach($html->find('ul') as $ul) { foreach($ul->find('li') as $li) echo $li->innertext . '
'
; } // Parsing checkbox $str = <<
"form1" method="post" action=""> "checkbox" name="checkbox1" value="checkbox1" checked>item1
"checkbox" name="checkbox2" value="checkbox2">item2
"checkbox" name="checkbox3" value="checkbox3" checked>item3
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