( Khởi nghiệp với Internet)
Hôm nay mình sẽ share cho các bạn đoạn code mình
viết dùng để bóc tách nội dung từ một website bất kỳ. Các bạn có thể download class
tại đây. Sau khi tải về các bạn giải nén ra sẽ có 2 file
simple_html_dom.php: đây là file thư viện html_dom
file này không phải do mình viết mà download từ trên mạng về. Dùng để
truy cập các phần tử dom một cách rất dễ dàng. Và mình sẽ không giải
thích về class này, các bạn có thể search
simple html dom sẽ có rất nhiều ví dụ và hướng dẫn
crawl.class.php: File chứa class, trong đó có các functions mình viết phục vụ cho việc bóc tách nội dung
Nội dung file
crawl.class.php như sau
- <?php
-
include_once ( "simple_html_dom.php" );
-
class H_Crawl{
-
var $html_content = '' ;
var $arr_att_clean = array ();
-
function H_Crawl(){
}
-
function getTitle( $link , $att_title ){
if ( $this ->html_content== '' ){
$html = file_get_html( $link );
$this ->html_content = $html ;
} else {
$html = $this ->html_content;
}
-
foreach ( $html ->find( $att_title ) as $e ){
$title = $e ->innertext;
}
return $title ;
}
-
function getContent( $link , $att_content ){
if ( $this ->html_content== '' ){
$html = file_get_html( $link );
$this ->html_content = $html ;
} else {
$html = $this ->html_content;
}
-
foreach ( $html ->find( $att_content ) as $e ){
$content_html = $e ->innertext;
}
$html = str_get_html( $content_html );
-
foreach ( $this ->arr_att_clean as $att_clean ){
foreach ( $html ->find( $att_clean ) as $e ){
$e ->outertext = '' ;
}
}
-
$ret = $html ->save();
return $ret ;
}
-
function removeLink( $content ){
$html = str_get_html( $content );
foreach ( $html ->find( 'a' ) as $e ){
$e ->outertext = $e ->innertext;
}
$ret = $html ->save();
return $ret ;
}
-
function removeLastElement( $content , $element ){
$html = str_get_html( $content );
$html ->find( $element , -1)->outertext = '' ;
$ret = $html ->save();
return $ret ;
}
-
function removeFirstElement( $content , $element ){
$html = str_get_html( $content );
$html ->find( $element , 0)->outertext = '' ;
$ret = $html ->save();
return $ret ;
}
-
- }
|
|
Xin giải thích một chút về class trên:
Dòng 7,8 là hai biến của class
1
2
|
var $html_content = '' ;
var $arr_att_clean = array ();
|
Dòng 15: function có tác dụng lấy title của một bài viết. Có 2 tham số truyền vào là:
$link: truyền vào là url của một bài viết
$element: element chứa title.
Ví dụ bài viết
http://thethao.vnexpress.net/tin-tuc/sea-games-27/tuyen-nu-viet-nam-thang-tung-bung-ngay-ra-quan-2923453.html có title là
Tuyển nữ Việt Nam thắng tưng bừng ngày ra quân
Sau khi dùng firebug để xem thì biết được rằng element truyền vào sẽ là “
div.title_news h1″.
Vậy tham số truyền vào là
$url = “
http://thethao.vnexpress.net/tin-tuc/sea-games-27/tuyen-nu-viet-nam-thang-tung-bung-ngay-ra-quan-2923453.html”
$element = “div.title_news h1″
Làm tương tự như vậy với hàm lấy content (nội dung) ta sẽ có
$url: tương tự như trên
$element = “div.fck_detail”
Sau đây là ví dụ cụ thể về lấy title và content của một bài viết, cụ thể là bài viết trên
- <head>
<meta http-equiv= "content-type" content= "text/html; charset=utf-8" />
<meta name= "author" content= "duchanh" />
<title>Crawl</title>
- </head>
- <?php
-
include_once ( 'crawl.class.php' );
-
$link = 'http://thethao.vnexpress.net/tin-tuc/sea-games-27/tuyen-nu-viet-nam-thang-tung-bung-ngay-ra-quan-2923453.html' ;
-
$H_Crawl = new H_Crawl();
- // xoa het cac the javascript va nhung the co class=".thumblock" di
$H_Crawl ->arr_att_clean = array ( 'script' , '.thumblock' );
-
- // lay title bai viet
$title = $H_Crawl ->getTitle( $link , 'div.title_news h1' );
-
- // lay noi dung bai viet
$content = $H_Crawl ->getTitle( $link , 'div.fck_detail' );
-
- // xoa het cac link trong phan noi dung di
$content = $H_Crawl ->removeLink( $content );
-
var_dump( $title );
var_dump( $content );
- ?>
|
|
Rất ngắn gọn phải không? với class này các bạn có thể
crawl nội dung của một trang web bất kỳ chỉ cần biết được các element cần bóc tách.
Ví dụ trên là lấy tin tức từ site vnexpress nội dung khá là clear.
Với những site khác thì nội dung lấy về có thể chứa những thẻ mình không
mong muốn như metag, like facebook ở những thì những function còn lại
trong class mình viết sẽ phát huy tác dụng.
Chúc các bạn thành công
Blog tổng hợp những kinh nghiệm được học, áp dụng và chia sẻ