Simple Html Dom là thư viện của Php giúp cho việc chúng ta có thể lấy các thuộc tính của các thẻ HTML trong 1 website. Chúng ta có thể lấy trực tiếp thông tin từ link web hoặc là từ 1 chuỗi, đồng thời ta có thể lấy về, và sửa đổi nội dung. Nghe có vẻ như kiểu dễ dàng lấy thông tin từ 1 trang web nào đó về cho web của mình vậy . Chúng ta sẽ thử dùng bộ thư viện này để lấy thông tin từ trang Viblo nhé. Nào bắt đầu thôi.
Cài đặt
Cài đặt có thể có nhiều cách đơn cử là các bạn down file zip tại đây hoặc có thể dùng qua thư viện của composer. Ở đây chúng ta sẽ dùng bằng cách thứ 2.
Để sử dụng được thì ta cần import thư viện cũng như dùng nó. Để dùng thì ta cần khai báo như sau
<?php
require __DIR__ . '/vendor/autoload.php';
use Sunra\PhpSimple\HtmlDomParser;
Đọc và lấy thông tin từ website
Để đọc thông tin chuyển sang định dạng single_html_dom thì có 2 cách. 1 là đọc trực tiếp từ link, 2 là lấy từ chuỗi string có định dạng HTML. Cách đọc trực tiếp từ link web
$dom = HtmlDomParser::file_get_html($link);
Cách đọc từ chuỗi string
$dom = HtmlDomParser::str_get_html($content);
Ở đây ta sẽ dung cách thứ 2, và để lấy chuỗi từ 1 link web ta sử dụng curl Ta sẽ viết 1 hàm để đọc từ 1 link web sau đó chuyển sang single_html_dom
function getDom($link)
{
$ch = curl_init($link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// Khi thực thi lệnh sẽ k view ra trình duyệt mà lưu lại vào 1 biến kiểu string
$content = curl_exec($ch);
curl_close($ch);
$dom = HtmlDomParser::str_get_html($content);
return $dom;
}
Thử lấy thông tin các bài viết và link từ trang Viblo
function getList()
{
$dom = getDom(https://viblo.asia/);
foreach ($dom->find('.container .col-lg-9 .post-title-box a.link') as $link) {
echo $link->href . '<br>';
}
}
Đấy là ta lấy link, còn lấy tiêu đề thì sao? Ta có thể thay **$link->href **bằng **$link-innertext ** Vậy từ việc lấy từng link ta có thể dễ dàng lấy các bài chi tiết khác rồi phải không? Vậy toàn bộ source chúng ta cần là như sau:
<?php
require __DIR__ . '/vendor/autoload.php';
use Sunra\PhpSimple\HtmlDomParser;
class ViobloTraining {
private $url;
public function __construct($link)
{
$this->url = $link;
}
private function getDom($link)
{
$ch = curl_init($link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// Khi thực thi lệnh sẽ k view ra trình duyệt mà lưu lại vào 1 biến kiểu string
$content = curl_exec($ch);
curl_close($ch);
$dom = HtmlDomParser::str_get_html($content);
return $dom;
}
public function getList()
{
$dom = $this->getDom($this->url);
foreach ($dom->find('.container .post-title-box a.link') as $link) {
echo $link->innertext . '<br>';
}
}
}
$a = new ViobloTraining('https://viblo.asia');
$a->getList();
Tổng kết
Bài viết này mình giới thiệu qua các bạn về cách convert html string sang dom từ đó có thể dễ dàng lấy thông tin hay các thuộc tính của nó. Tuy nhiên cách này không sử dụng được cho những trang phải đăng nhập hay sử dụng captcha. Chỉ là lấy thông tin các báo mạng thì có lẽ ổn. Bài viết thuộc bản quyền Viblo