Thứ Ba, 12 tháng 3, 2019

bạn sẽ nhận được tất cả các URL trong trang. Bạn có thể thu thập lại các URL đã thành lập để tìm thêm URL

Đăng Bởi: Admin - tháng 3 12, 2019 - 0 Bình Luận

Cách tạo trình thu thập dữ liệu web đơn giản trong PHP


Cách tạo trình thu thập dữ liệu web đơn giản trong PHP


Một Crawler Web  là một chương trình bóc tách thông qua các trang web trong Web và lập chỉ mục những URL 's. Công cụ tìm kiếm  sử dụng trình thu thập thông tin để lập chỉ mục URL trên Web. Google sử dụng trình thu thập thông tin được viết bằng Python . Có các công cụ tìm kiếm khác sử dụng các loại trình thu thập thông tin khác nhau.
Trong bài viết này tôi sẽ cho bạn biết cách tạo Trình thu thập dữ liệu Web đơn giản trong PHP .
Các mã hiển thị ở đây được tạo ra bởi tôi. Tôi mất 2 ngày để tạo một trình thu thập thông tin đơn giản. Sau đó, sẽ mất bao nhiêu thời gian để tạo ra một trình thu thập thông tin hoàn hảo? Tạo một trình thu thập thông tin là một nhiệm vụ rất khó khăn. Nó giống như tạo ra một Robot. Hãy bắt đầu xây dựng một trình thu thập thông tin.
Để phân tích trang web của một URL, chúng tôi sẽ sử dụng  lớp Dom HTML đơn giản có thể được tải xuống tại Sourceforge . Bao gồm tệp "simple_html_dom.php" và đề cập đến các biến chúng tôi sẽ sử dụng:
include "simple_html_dom.php";
$crawled_urls = array();
$found_urls = array();
Sau đó, Thêm các chức năng chúng ta sẽ sử dụng. Các chức năng sau đây sẽ chuyển đổi tương đối  URL 's để tuyệt đối URL ' s:
function rel2abs($rel,   $base) {
    if (parse_url($rel,  PHP_URL_SCHEME)  !=  '') {
        return  $rel;
    }
    if ($rel[0] == '#'  ||   $rel[0] == '?') {
        return  $base . $rel;
    }
    extract(parse_url($base));
    $path  =  preg_replace('#/[^/]*$#',  '',   $path);
    if ($rel[0]  ==  '/') {
        $path  =  '';
    }
    $abs  =  "$host$path/$rel";
    $re   =  array('#(/.?/)#',  '#/(?!..)[^/]+/../#');
    for ($n = 1;   $n & gt; 0; $abs = preg_replace($re, '/',   $abs, -1, $n)) {}
    $abs = str_replace('../', '', $abs);
    return  $scheme . '://' . $abs;
}
Hàm sau sẽ thay đổi URL được tìm thấy khi thu thập thông tin thành URL thực :
function perfect_url($u, $b) {
    $bp = parse_url($b);
    if (($bp['path'] != '/'  & amp; & amp;   $bp['path'] != '')  ||   $bp['path'] == '') {
        if ($bp['scheme'] == '') {
            $scheme = 'http';
        } else {
            $scheme = $bp['scheme'];
        }
        $b = $scheme . '://' . $bp['host'] . '/';
    }
    if (substr($u, 0, 2) == '//') {
        $u = 'http:' . $u;
    }
    if (substr($u, 0, 4) != 'http') {
        $u = rel2abs($u, $b);
    }
    return  $u;
}
Mã này là cốt lõi  của trình thu thập thông tin:
function crawl_site($u) {
    global  $crawled_urls,   $found_urls;
    $uen = urlencode($u);
    if ((array_key_exists($uen, $crawled_urls) == 0  ||   $crawled_urls[$uen]  & lt;  date('YmdHis', strtotime('-25 seconds',  time())))) {
        $html              =  file_get_html($u);
        $crawled_urls[$uen] = date('YmdHis');
        foreach ($html- & gt; find('a') as  $li) {
            $url   = perfect_url($li- & gt; href, $u);
            $enurl = urlencode($url);
            if ($url != ''  & amp; & amp;  substr($url, 0, 4) != 'mail'  & amp; & amp;  substr($url, 0, 4) != 'java'  & amp; & amp;  array_key_exists($enurl, $found_urls) == 0) {
                $found_urls[$enurl] = 1;
                echo  $url . PHP_EOL;
            }
        }
    }
}
Cuối cùng, chúng tôi sẽ gọi crawl_site  chức năng để crawl  một URL . Tôi sẽ sử dụng http://subinsb.com  để thu thập thông tin .
crawl_site("http://subinsb.com");
Khi bạn chạy trình thu thập thông tin PHP ngay bây giờ, bạn sẽ nhận được tất cả các URL trong trang. Bạn có thể thu thập lại các URL đã thành lập để tìm thêm URL, nhưng bạn sẽ cần Máy chủ nhanh và Kết nối Internet tốc độ cao.
Một siêu máy tính và kết nối Internet 10 GB / giây sẽ là hoàn hảo cho điều đó. Nếu bạn nghĩ rằng máy tính của bạn nhanh và có thể thu thập dữ liệu của nhiều URL, thì hãy thay đổi dòng sau trong mã:
echo  $url . PHP_EOL;
đến :
crawl_site($url);
Lưu ý: - Mã không hoàn hảo, có thể có lỗi khi thu thập dữ liệu của một số URL. Tôi không khuyên bạn nên thu thập lại URL được tìm thấy trừ khi bạn có Siêu máy tính và Kết nối Internet tốc độ cao. Hãy thoải mái làm cho trình thu thập thông tin tốt hơn, tuyệt vời và nhanh chóng @

Phản Hồi Độc Giả

Một số lưu ý khi bình luận

Mọi bình luận sai nội quy sẽ bị xóa mà không cần báo trước (xem nội quy)

Bấm Thông báo cho tôi bên dưới khung bình luận để nhận thông báo khi admin trả lời

Để bình luận một đoạn code, hãy mã hóa code trước nhé