VietNetwork.Vn

 


Tác giả Chủ đề: Demo Dùng PHP Crawler Để Lấy Dữ Liệu Tự Động Từ Một Website  (Đã xem 441 lần)

0 Thành viên và 1 Khách đang xem chủ đề.

server360

  • Administrator
  • Hero Member
  • *****
  • Bài viết: 3208
  • Số Lần: +72/-0
Hôm nay chúng ta sẽ tìm hiểu crawler là gì và demo dùng PHP Crawler để lấy dữ liệu từ một website một cách tự động.
I. Crawler là gì ?

Crawler là 1 từ để ám chỉ các công cụ (phần mềm, modules, plugins… hay đơn giản chỉ là 1 funtion nho nhỏ) có chức năng chính là tự động phân tích dữ liệu từ nguồn nội dung sau đó bóc tách những thông tin cần thiết theo tiêu chí mà nó được lập trình viên hệ thống thiết lập.
II. Dùng thư viện PHPCrawl để lấy dữ liệu tự động từ website

1. Về PHPCrawl

PHPCrawl là một thư viện phát triển cho việc crawling/spidering websites viết bằng ngôn ngữ PHP. Các bạn có thể tham khảo thêm tại: You are not allowed to view links. Register or Login.

2. Demo dùng PHPCrawl để lấy dữ liệu tự động từ một website

Trước tiên, các bạn có tải thư viện PHPCrawl tại đây, sau đó giải nén vào localhost của bạn. Chúng ta có thể chạy ngay file example.php và xem kết quả, nhưng để đơn giản cho các bạn mới tìm hiểu, các bạn có thể sủa file example.php bằng đoạn code dưới mà tôi đã giải thích rõ ràng.

<?php
 
// Set timeout
set_time_limit(10000);
 
// Inculde thư viện PHPCrawl
include("libs/PHPCrawler.class.php");
 
 
// Extend the class PHPCrawler and cài đè phương thức handleDocumentInfo()
class MyCrawler extends PHPCrawler
{
// Các bạn cài đè phương thức handleDocumentInfo() để xử lý tất cả các thông tin thu tập được.
  function handleDocumentInfo(PHPCrawlerDocumentInfo $DocInfo)
  {
 
    // Lấy toàn bộ url của website
    echo "Page requested: ".$DocInfo->url. "</br></br>";
   
    flush();
  }
}
 
// Tạo đối tượng crawler và bắt đầu tiến trình thu thập dữ liệu
 
$crawler = new MyCrawler();
 
// set URL mà ta muốn crawler
$crawler->setURL("http://phpcoban.com/");
 
// Chỉ lấy các file mà nội dung là "text/html"
$crawler->addContentTypeReceiveRule("#text/html#");
 
// Một bộ lọc cho phép ta không lấy các link ảnh, css hoặc javascript
$crawler->addURLFilterRule("#(jpg|gif|png|pdf|jpeg|svg|css|js)$# i");
 
// Trong quá trình crawler, lưu trữ và gửi cookie giống như ta vào bằng trinh duyệt
$crawler->enableCookieHandling(true);
 
// Thiết lập dung lượng(bytes) thu thập được trong quá trình crawler
$crawler->setTrafficLimit(1000 * 1024);
 
// Nào, chạy thôi, hehe, :))
$crawler->go();
 
// Sau khi quá trình crawler kết thúc, ghi lại báo cáo!!
$report = $crawler->getProcessReport();
 
if (PHP_SAPI == "cli") $lb = "\n";
else $lb = "<br />";
   
echo "Summary:".$lb;
echo "Links followed: ".$report->links_followed.$lb;
echo "Documents received: ".$report->files_received.$lb;
echo "Bytes received: ".$report->bytes_received." bytes".$lb;
echo "Process runtime: ".$report->process_runtime." sec".$lb;
?>

Để hiểu rõ hơn, các bạn có thể xem thêm các phương thức của PHPCrawl tại đây và các phương thức của lớp PHPCrawlerDocumentInfo tại đây.

Kết quả:



Các bạn có thấy chúng ta vẫn chưa lấy hết links trên trang phpcoban.com do chúng ta setTrafficLimit(1000 * 1024), các bạn có thể bỏ dòng $crawler->setTrafficLimit(1000 * 1024) và xem kết quả rất thú vị. :)).

Như vậy, chúng ta đã lấy được các links trên trang  phpcoban.com. Giờ chúng ta sẽ kết hợp thư viện simple_html_dom để phân tích dữ liệu trên các links chúng ta vừa thu thập được.

Các bạn tải thư viện simple_html_dom tại đây.
Bây giờ chúng ta sẽ lấy title trên các links mà ta thu thập được trong quá trình crawler.

Các bạn sửa lại file example.php

<?php
 
// Set timeout
set_time_limit(10000);
 
// Inculde thư viện PHPCrawl
include("libs/PHPCrawler.class.php");
include("simple_html_dom.php");
 
 
// Extend the class PHPCrawler and cài đè phương thức handleDocumentInfo()
class MyCrawler extends PHPCrawler
{
// Các bạn cài đè phương thức handleDocumentInfo() để xử lý tất cả các thông tin thu tập được.
  function handleDocumentInfo(PHPCrawlerDocumentInfo $DocInfo)
  {
 
    // Lấy toàn bộ url của website
    echo "Page requested: ".$DocInfo->url."</br>";
   
// lấy file html từ các links crawler được.
$html = file_get_html($DocInfo->url);
 
if(is_object($html)){

// Trả về đối tượng nếu tìm được, hoặc null nếu không.
    $t = $html->find("title", 0);
    if($t){
  $title = $t->innertext;
    }
 
    echo "Title: ".$title."</br></br></br>";
    $html->clear();
    unset($html);
}

    flush();
  }
}
 
// Tạo đối tượng crawler và bắt đầu tiến trình thu thập dữ liệu
 
$crawler = new MyCrawler();
 
// set URL mà ta muốn crawler
$crawler->setURL("http://phpcoban.com/");
 
// Chỉ lấy các file mà nội dung là "text/html"
$crawler->addContentTypeReceiveRule("#text/html#");
 
// Một bộ lọc cho phép ta không lấy các link ảnh, css hoặc javascript
$crawler->addURLFilterRule("#(jpg|gif|png|pdf|jpeg|svg|css|js)$# i");
 
// Trong quá trình crawler, lưu trữ và gửi cookie giống như ta vào bằng trinh duyệt
$crawler->enableCookieHandling(true);
 
// Thiết lập dung lượng(bytes) thu thập được trong quá trình crawler
$crawler->setTrafficLimit(1000 * 1024);
 
// Nào, chạy thôi, hehe, :))
$crawler->go();
 
// Sau khi quá trình crawler kết thúc, ghi lại báo cáo!!
 
$report = $crawler->getProcessReport();
 
if (PHP_SAPI == "cli") $lb = "\n";
else $lb = "<br />";
   
echo "Summary:".$lb;
echo "Links followed: ".$report->links_followed.$lb;
echo "Documents received: ".$report->files_received.$lb;
echo "Bytes received: ".$report->bytes_received." bytes".$lb;
echo "Process runtime: ".$report->process_runtime." sec".$lb;
?>

Các bạn có thể xem các phương thức thư viện simple_html_dom tại đây.
Chúng ta chạy file example.php và xem kết quả:



Như vậy, chúng ta đã tìm hiểu được crawler là gì và cách lấy dữ liệu tự động từ một website.


 

Copyright © VietNetwork.Vn