Hướng dẫn load html in php - tải html trong php

Hướng dẫn load html in php - tải html trong php

Published Feb 28th, 2017 11:49 a.m. 2 min read 2 min read

Hôm nay, mình sẽ giới thiệu với các bạn về việc lấy dữ liệu từ cách website khác bằng việc sử dụng thư viện trong php. Và thư viện mình giới thiệu hôm nay đó là thư viện PHP Simple HTML DOM ParserPHP Simple HTML DOM Parser

PHP Simple HTML DOM Parser là một thư viện của PHP giúp chúng ta có thể lấy các thuộc tính của các thẻ HTML trong 1 website rất dễ dàng. Nó hỗi trợ một số tính năng như là một thư viện của PHP giúp chúng ta có thể lấy các thuộc tính của các thẻ HTML trong 1 website rất dễ dàng. Nó hỗi trợ một số tính năng như

  1. Hôĩ trợ bóc tách dữ liệu theo từng id, class hoặc thể img, a, table, ...
  2. Code ngắn dễ học, dễ viết, dễ nhớ ...
  3. Khá nhẹ nhàng

Cài đặt Để để tải thư viện này bạn có thể lên trang chủ của nó tại địa chỉ http://simplehtmldom.sourceforge.net/ để tải 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 file đó vào file bạn muốn lấy dữ liệu để sử dụng. Các khác bạn có thể cài đặt nó thông qua composer. Sử dụng Thư viện này rất dễ sử dụng. Mình tìm hiểu qua một số tính năng của thư viện. Đọc nội dùng của một file. Để để tải thư viện này bạn có thể lên trang chủ của nó tại địa chỉ http://simplehtmldom.sourceforge.net/ để tải 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 file đó vào file bạn muốn lấy dữ liệu để sử dụng. Các khác bạn có thể cài đặt nó thông qua composer. Sử dụng Thư viện này rất dễ sử dụng. Mình tìm hiểu qua một số tính năng của thư viện. Đọc nội dùng của một file.

$html = file_get_html('link của trang web');
echo $html;

Hiển thị tất cả các ảnh

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

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

$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);

Truyền số 0 vào đằng sau để lấy ra nội dung đầu tiên trong id của mảng. Các trường hợp lấy theo class, table, p ... cũng lấy tương tự.

Thực hành lấy dữ liệu qua ví dụ cụ thể. Ví dụ 1. Hiển thị toàn bộ nội dung trang web. Ví dụ 1. Hiển thị toàn bộ nội dung trang web.


Ví dụ 2. Lấy ảnh từ trang web trên

find('.block_thumb_slide_show',0)->outertext='';
    $html ->load($html ->save());
    $tieude = $html->find('.title_news',0);
    $noidung = $html->find('#article_content',0);
?>

plaintext?>

innertext?>

Kết luận Vừa rồi mình mới giới thiệu qua cho các bạn về thư viện PHP Simple HTML DOM Parser để lấy dự liệu từ các trang web khác về web của mình. Tham khảo https://code.tutsplus.com/tutorials/html-parsing-and-screen-scraping-with-the-simple-html-dom-library--net-11856 http://simplehtmldom.sourceforge.net/manual.htm Vừa rồi mình mới giới thiệu qua cho các bạn về thư viện PHP Simple HTML DOM Parser để lấy dự liệu từ các trang web khác về web của mình. Tham khảo https://code.tutsplus.com/tutorials/html-parsing-and-screen-scraping-with-the-simple-html-dom-library--net-11856 http://simplehtmldom.sourceforge.net/manual.htm

All Rights Reserved

Trong bài này chúng ta cùng tìm hiểu thêm một cách nữa để lấy dữ liệu từ trang khác thông qua việc sử dụng thư viện. Có một số thư viện hỗ trợ việc này nhưng trong bài viết này mình sẽ giới thiệu đến các bạn sử dụng thư viện

$html = file_get_html('http://www.google.com/');
foreach($html->find('img') as $element) {
       echo '
'; }
9. Trước tiên mình xin tản mạn một chút cái duyên của mình với thư viện này đã.

Hướng dẫn load html in php - tải html trong php

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.

Cũng tầm tháng này năm trước lúc đó mình mới ra trường và có làm một dự án liên quan đến việc bóc tách dữ liệu từ trang khác. Lúc đấy mình chưa biết CURL là gì. Mình có hỏi anh sếp mình về việc làm gì để lấy dữ liệu. Vì anh ấy cũng mới làm xong dự án lấy dữ liệu tự động từ web khác. Thế là được chỉ cho là dùng thư viện dom. Mình đã lên google tìm kiếm xem dom là gì cách dùng dom ra sao và đã biết đến thư viện này. Và đã áp dụng nó vào dự án của mình và mình cũng đã hoàn thành nó. Bản thân mình là một người CHUNG TÌNH nên những cái gi mình đã ấn tượng và sử dụng lần đầu thì mình rất ngại đổi nên giờ một dự án mà liên quan đến lấy dữ liệu mình vẫn CHUNG TÌNH với bạn dom này dù có thể có nhiều thư viện hay hơn. (Từ CHUNG TÌNH mình chỉ dùng để PR bản thân thôi bạn có thể bỏ qua nó nhé )

Hướng dẫn load html in php - tải html trong php
)

Tản mạn vậy thôi chứ mình không khuyến khích các bạn dùng thư viện này và quên đi anh bạn CURL bạn vẫn nên tìm hiểu về CURL, còn việc dùng thư viện hay không là do bạn quyết định. Việc dùng thư viện sẽ khiến đoạn code của bạn ngắn đi nhiều nhưng có thể sẽ làm bạn mất đi cái căn bản.

OK trình bày thế đủ rồi chúng ta bắt đầu tìm hiểu thôi.

Bài viết này được đăng tại [free tuts .net]

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.

Và còn gì nữa thì có lẽ sau khi bạn sử dụng thì tự rút ra ý kiến chứ mình bị hạn hán lời nên liệt kê được thế thôi. Nói chung để mà viết pr cho mình là mình có thể viết rất tốt nhưng viết pr về vấn đề khác mình không làm được nên mình xin kết thúc phần một tại đây.lẽ sau khi bạn sử dụng thì tự rút ra ý kiến chứ mình bị hạn hán lời nên liệt kê được thế thôi. Nói chung để mà viết pr cho mình là mình có thể viết rất tốt nhưng viết pr về vấn đề khác mình không làm được nên mình xin kết thúc phần một tại đây.

2. Hướng dẫn tải về và sử dụng PHP Simple HTML DOM Parser.HP 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ề. Ở đây mình sẽ đính kèm luôn file đính kèm lên blog này. Bạn có thể tải về tại đây.http://simplehtmldom.sourceforge.net để down về. Ở đây mình sẽ đính kèm luôn file đính kèm lên blog này. Bạn có thể tải về tại đây.

Sau khi đã có thư viện bạn copy file

$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
0 vào dự án của mình và
$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
1 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ờ bạn 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 '
'; }

Lưu ý biến

$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
2 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 . '
';

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

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

Ở đây bạn tôi 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 tôi truyền số 0 vào đằng sau để 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à tôi muốn lấy nội dung từ class content thứ hai thị bạn làm như sau

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

Làm tương tự đối với các thẻ khác như

$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
3,
$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
4... Bạn lưu ý nhé nếu như không truyền số vào đằng sau kết quả trả về là mảng bạn sẽ cần foreach để show dữ liệu ra, còn nếu truyền số vào thì kết quả trả về là một chuỗi bạn echo bình thường trong quá trình sử dụng tùy từng mục đích mà bạn áp dụng cho phù hợp.

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.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.

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

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 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: Lấy nội dung (text) từ trang web
  • innertext: Chỉ lấy nội dung bên trong thẻ..: Chỉ lấy nội dung bên trong thẻ..
  • outertext: Lấy cả thẻ và nội dung bên trong.: 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 = file_get_html('http://www.google.com/');
foreach($html->find('img') as $element) {
       echo '
'; }
1

Bạn nhớ nhé khi cần xóa một phần từ nào đó thi gán

$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
5 như ở trên là đươc. Bạn làm tương tự với các class và 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

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

Như thế nếu bạn echo

$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
2thì nội dung bạn chưa được sửa đổi đâu bạn cần thêm một bước này nữa trước khi xuất dữ liêụ ra.

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

Mục đích của dòng trên là để lưu lại nội dung

$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
2đã được sửa đổi.

Trường hợp cuối cùng bạn cần lấy nội dung ở nhiều trang mình đã gặp trường hợp phải kết hợp mấy trang mới lấy hết thông tin. Một trang có nhiệm vụ show nội dung chi tiết sản phẩm,một trang show giá và một trang để lấy màu sắc của sản phẩm. Đối với trường hợp này bạn làm như sau.Sau khi bạn đã lấy được nội dung của trang thứ nhất và gán nó vào biến cụ thể rồi thì bạn hủy nội dung trong

$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
2đi và tiếp tục get sang trang thứ hai. Phương pháp hủy như sau đây là phương pháp tôi demo và thấy nó chạy cũng không chắc là nó tối ưu nhưng mà dùng được.

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

3. Thực hành lấy dữ liệu qua ví dụ cụ thể.

Nhìn code nhiều cùng với nối viết văn hơi loằng ngoằng của mình có lẽ sẽ khiến bạn đau đầu và không muốn theo dõi tiếp. Vậy thì để thay đổi không khí chúng ta cùng bắt tay vào lấy dữ liệu từ một trang cụ thể nhé.

Ở đây tội chọn lấy nội dung bài viết từ link sau:

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

Ví dụ 1:Hiển thị toàn bộ nôi dung trang web,tôi viết code file

$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
9như sauHiển thị toàn bộ nôi dung trang web,tôi viết code file
$html = file_get_html('http://www.google.com/');
$noidung = $html->find('#ten_id',0);
9như sau

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

Ví dụ 2:Như bạn đã thấy ở trên khi bạn chạy nó sẽ hiển thị nội dung toàn bộ nội dung từ trang web vnexpress ra rõ ràng là trên thực tế sẽ không có trường hợp nào như thế. Bây giờ chúng ta cùng bắt tay vào ví dụ 2 lấy tiêu để đổ vào thẻ h2,và nội dung đổ vào id contentvà lúc này tôi code


0như sauNhư bạn đã thấy ở trên khi bạn chạy nó sẽ hiển thị nội dung toàn bộ nội dung từ trang web vnexpress ra rõ ràng là trên thực tế sẽ không có trường hợp nào như thế. Bây giờ chúng ta cùng bắt tay vào ví dụ 2 lấy tiêu để đổ vào thẻ h2,và nội dung đổ vào id contentvà lúc này tôi code

0như sau

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

Ví dụ 3:Tôi thấy bức ảnh đầu tiên anh ấy cười to quá tôi muốn xóa bỏ ảnh này,tôi kiểm tra thấy ảnh này thuôc class


1lúc này code

2của tôi như sau
Tôi thấy bức ảnh đầu tiên anh ấy cười to quá tôi muốn xóa bỏ ảnh này,tôi kiểm tra thấy ảnh này thuôc class

1lúc này code

2của tôi như sau

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

Bạn chạy lần lượt ba ví dụ để xem kết quả nhé.

4. Kết luận

Ở trên tôi vừa giới thiệu đến các bạn cách lấy dữ liệu với thư viện


3hy 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. Những ví dụ tôi nêu ở trên là những ví dụ đơn giản còn trong quá trình làm dự án thực tế sẽ có những trường hợp phức tạp hơn rất nhiều nên các bạn cứ chịu khó quay tay nhiều vào thì vận may sẽ đến với các bạn.Trong bài viết có thể có nhiều chỗ chưa chính xác mang quan điểm cá nhân tác giả thì cũng mong nhận được sự góp ý từ phía các bạn.

3hy 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. Những ví dụ tôi nêu ở trên là những ví dụ đơn giản còn trong quá trình làm dự án thực tế sẽ có những trường hợp phức tạp hơn rất nhiều nên các bạn cứ chịu khó quay tay nhiều vào thì vận may sẽ đến với các bạn.Trong bài viết có thể có nhiều chỗ chưa chính xác mang quan điểm cá nhân tác giả thì cũng mong nhận được sự góp ý từ phía các bạn.

Chúc các bạn học tốt.

Bài viết được đóng góp bởi bạn ChiPheo