DOM phân tích, trích xuất dữ liệu HTML

Thư viện DOM hỗ trợ bóc tách dữ liệu trong chuỗi HTML dễ dàng và nhanh chóng. Đặc biệt phục vụ tốt cho việc lấy dữ liệu tự động từ website khác.

Khai báo thư viện

$soc->use_dom();

Lấy dữ liệu và tạo DOM

// Lấy dữ liệu và tạo DOM từ URL  $dom = $soc->dom->getDom('https://thietkewebso.com');    // Lấy dữ liệu và tạo DOM từ file  $dom = $soc->dom->getDom('dir/abc.html');    // Tạo dom từ chuỗi HTML  $html = 'Chuỗi HTML';  $dom = $soc->dom->toDom($html);    // Trường hợp bị URL đích chặn có thể sử dụng CURL để vượt  $soc->use_curl();  $html = $soc->curl->get('https://thietkewebso.com');  $dom = $soc->toDom($html);

Tìm thành phần bất kỳ

Từ đối tượng $dom ở các ví dụ trên, tiếp tục sử dụng ham find để bóc tách lấy thành phần mong muốn.

// Tìm tất cả thẻ a, trả về mảng  $e = $dom->find('a');    // Tìm thẻ a đầu tiên, trả về thẻ a hoặc rỗng (nếu không tìm thấy)  $e = $dom->find('a', 0);    // Tìm thẻ a cuối cùng, trả về thẻ a hoặc rỗng (nếu không tìm thấy)  $e = $dom->find('a', -1);     // Tìm tất cả div có thuộc tính id  $e = $dom->find('div[id]');    // Tìm tất cả thẻ div có thuộc tính id=foo  $e = $dom->find('div[id=foo]');    // Tìm tất cả thành phần có id=foo  $e = $dom->find('#foo');    // Tìm tất cả thành phần có class=foo  $e = $dom->find('.foo');    // Tìm tất cả thành phần có thuộc tính id  $e = $dom->find('*[id]');     // Tìm tất cả thẻ a và thẻ img  $e = $dom->find('a, img');     // Tìm tất cả thẻ a có thuộc tính title và thẻ img có thuộc tính title  $e = $dom->find('a[title], img[title]');    // Tìm tất cả li bên trong ul  $e = $dom->find('ul li');    // Tìm các div sâu trong cấp thứ 3  $e = $dom->find('div div div');     // Tìm tất cả td bên trong table có class=hello   $e = $dom->find('table.hello td');    // Tìm tất cả td có thuộc tính align=center bên trong table  $e = $dom->find('table td[align=center]');    // Tìm tất cả li trong tất cả ul  foreach($dom->find('ul') as $ul){  	foreach($ul->find('li') as $li){  		// Code gì đó ở đây  	}  }    // Tìm li đầu tiên trong ul đầu tiên  $e = $dom->find('ul', 0)->find('li', 0);    // Tìm tất cả thành phần có thuộc tính title  $e = $dom->find('[title]');    // Tìm tất cả thành phần không có thuộc tính title  $e = $dom->find('[!title]');    // Tìm tất cả thành phần có thuộc tính title=abc  $e = $dom->find('[title="abc"]');    // Tìm tất cả thành phần có thuộc tính title khác abc  $e = $dom->find('[title!="abc"]');    // Tìm tất cả thành phần có thuộc tính title bắt đầu bằng abc  $e = $dom->find('[title^="abc"]');    // Tìm tất cả thành phần có thuộc tính title kết thúc bằng abc  $e = $dom->find('[title$="abc"]');    // Tìm tất cả thành phần có thuộc tính title có chữ abc  $e = $dom->find('[title*="abc"]');    // Tìm mọi cụm văn bản  $e = $dom->find('text');    // Tìm mọi cụm comment  $e = $dom->find('comment');

Lấy giá trị hoặc thay đổi giá trị

Với các $e (element) ở trên, có thể lấy ra giá trị hoặc tiến hành thay đổi giá trị.

// Lấy ra giá trị của thuộc tính href  $value = $e->href;    // Thay đổi giá trị của thuộc tính href  $e->href = 'https://thietkewebso.com';    // Xóa bỏ thuộc tính href  $e->href = null;    // Kiểm tra xem thuộc tính href có tồn tại hay không  if(isset($e->href))  	echo 'href exist!';    // Đọc hoặc ghi tên thẻ (thẻ a, thẻ div, ...)  $e->tag;    // Đọc hoặc ghi chuỗi HTML bên ngoài $e  $e->outertext;    // Đọc hoặc ghi chuỗi HTML bên trong $e  $e->innertext;    // Đọc hoặc ghi văn bản bên trong $e (chỉ còn lại text, bỏ hết tag)  $e->plaintext;    // In ra chữ bên trong  echo $e->plaintext;    // Bọc bên ngoài đối tượng các dữ liệu khác  $e->outertext = 'Thẻ mở '.$e->outertext.' Thẻ đóng';    // Xóa bỏ đối tượng  $e->outertext = '';    // Thêm vào phía sau  $e->outertext = $e->outertext.'foo';    // Thêm vào phía trước  $e->outertext = 'foo'.$e->outertext;    // Tìm hiểu thêm về DOM: https://www.php.net/manual/en/book.dom.php    // Ví dụ  echo $html->find("#div1", 0)->children(1)->children(1)->children(2)->id;    // Ví dụ  echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');    // Trả về mảng các thành phần con  $e->children();    // Trả về thành phần con đầu tiên  $e->children(0);    // Trả về mảng các thành phần cha  $e->parent();    // Trả về thành phần con đầu tiên hoặc trả về rỗng nếu không tìm thấy  $e->first_child();    // Trả về thành phần con cuối cùng hoặc trả về rỗng nếu không tìm thấy  $e->last_child();    // Trả về thành phần tiếp theo hoặc trả về rỗng nếu không tìm thấy  $e->next_sibling();    // Trả về thành phần phía trước hoặc trả về rỗng nếu không tìm thấy  $e->prev_sibling();

Chuyển từ DOM sang chuỗi HTML

// Lưu vào biến  $html = $dom->save();    // Lưu vào file  $dom->save('dir/abc.html');


09-08-2021

Bài viết liên quan