VN tin mới trang chuyên tin học , Kiếm tiền online, Tin tức công nghê, Phầm mềm tiện ích,thủ thuật máy tính,hướng dẫn kiếm tiền , Trò chơi

Powered by Blogger.

2/4/13

[PHP] Tạo 1 con robot Crawler như Google

0 comments
Google có hàng trăm crawler đi thu thập dữ liệu khắp các website trên Internet với trí thông minh và khả năng xử lý mạnh mẽ. Hôm nay chúng ta cùng nhau viết 1 con crawler như vậy, tuy không mạnh mẽ và thông minh như các crawler của Google nhưng nó cũng làm được những tác vụ căn bản nhất: lấy dữ liệu.

Mục đích con robot mà chúng ta sắp viết là nó sẽ truy cập vào một website được chỉ định (hoặc 1 page được chỉ định) và tiến hành index lại tất cả các liên kết, hình ảnh mà nó bắt gặp trên website. Sau khi thực hiện xong 1 page, bạn có thể dụng các liên kết mà crawler này tìm được để di chuyển tiếp tục sang các page khác và tiếp tục index dữ liệu thêm nữa cho đến lúc hết website. 

Tuy nhiên, trong bài viết nay chúng ta chỉ tập trung vào việc làm thế nào để tạo ra con crawler làm việc đó. Phần còn lại (xử lý dữ liệu, viết các function nâng cao cho crawler này thì để giành cho các bạn cùng nghiên cứu và chia sẻ nhá 

Đầu tiên chúng ta cần tạo ra 1 crawler, tôi tạo 1 class Crawler như sau: 

Mã PHP: (SELECT ALL)
class Crawler {


Tiếp theo, tiến hành thêm các hàm cần thiết để nó có thể hoạt động. Chúng ta này cần làm 2 việc quan trọng: 

Lấy dữ liệu thô: Tải trang web được chỉ định về. 
Lọc dữ liệu: yêu cầu phía trên của chúng ta là lấy các hình ảnh và liên kết nên chúng ta sẽ lọc chúng. 

Mã PHP: (SELECT ALL)
class Crawler {

protected 
$content'';

public function 
__construct($uri) {

}

public function 
get($type) {

}

public function 
get_images() {

}

public function 
get_links() {

}
?>

Lấy dữ liệu thô 
Code hàm getContent và _construct được code như sau 

Mã PHP: (SELECT ALL)
public function __construct($uri) { $this->content $this->getContent($uri);
}

public function 
getContent($uri) {
return 
file_get_contents($uri);


Lọc dữ liệu 
Các hàm còn lại của đối tượng Crawler ở trên 

Mã PHP: (SELECT ALL)
public function get_images() {
if (!empty(
$this->content)){ preg_match_all('/<img.+src=\"([^\"]+)\"[^\/>]+[\/]?>/i'$this->markup$images);
return !empty(
$images[1]) ? $images[1] : FALSE;
}
}

public function 
get_links() {
if (!empty(
$this->content)){ preg_match_all('/<a.+href=\"([^\"]+)\"[^>]+>[^<]+<\/a>/i'$this->markup$links);
return !empty(
$links[1]) ? $links[1] : FALSE;
}

Code hoàn chỉnh 
Đây là em nó sau cùng 

Mã PHP: (SELECT ALL)
<?phpclass Crawler {

protected 
$markup '';

public function 
__construct($uri) {
     
$this->markup $this->getMarkup($uri);
}

public function 
getMarkup($uri) {
    return 
file_get_contents($uri);
}


public function 
get_images() {
    if (!empty(
$this->markup)){
        
preg_match_all('/<img.+src=\"([^\"]+)\"[^\/>]+[\/]?>/i'$this->markup$images);
        return !empty(
$images[1]) ? $images[1] : FALSE;
    }
}

public function 
get_links() {
        if (!empty(
$this->markup)){
            
preg_match_all('/<a.+href=\"([^\"]+)\"[^>]+>[^<]+<\/a>/i'$this->markup$links);
            return !empty(
$links[1]) ? $links[1] : FALSE;
        }
    }
}
$crawl = new Crawler('http://sanphamtinhoc.com'); $images $crawl->get_images(); $links $crawl->get_links(); var_dump($images);var_dump($links);?>

Sử dụng con Crawler này như thế nào 
Cần lưu ý là con crawler như ở trên chỉ có thể duyệt được 1 trang duy nhất theo URL được truyền vào. Để duyệt được nhiều trang bạn chỉ việc duyệt 1 trang đầu tiên và lặp lại mảng kết quả (URL) để tiếp tục duyệt các URL được tìm thấy.

Mã PHP: (SELECT ALL)
$array_url = array('http://sanphamtinhoc.com','http://fit-hitu.edu.vn/forum','http://forum.congthuong.net');
foreach(
$array_url as $url)
{
   
$crawl = new Crawler($url);
   
$images $crawl->get_images();
   
$links $crawl->get_links();
   
var_dump($images);
   
var_dump($links);


Nguồn: http://fit-hitu.edu.vn

No comments:

Post a Comment