Heim  >  Artikel  >  Backend-Entwicklung  >  Grundlegendes Crawler-Tutorial: Das PHP-Programm implementiert Single-Threaded- und Multi-Threaded-Daten-Crawling

Grundlegendes Crawler-Tutorial: Das PHP-Programm implementiert Single-Threaded- und Multi-Threaded-Daten-Crawling

WBOY
WBOYOriginal
2023-06-13 11:39:121067Durchsuche

Grundlegendes Crawler-Tutorial: PHP-Programm implementiert Single-Thread- und Multi-Thread-Crawling von Daten

Mit der Entwicklung der Internet-Technologie wird die Crawler-Technologie in verschiedenen Datenerfassungsszenarien immer häufiger eingesetzt. Einfach ausgedrückt simuliert die Crawler-Technologie das Browserverhalten, initiiert Anfragen an Zielwebsites, ruft Webinhalte ab und führt Datenextraktion und -analyse durch.

In PHP-Programmen kann die Crawler-Technologie mit Hilfe von Drittanbieterkomponenten wie cURL und Simple HTML DOM implementiert werden, was den Arbeitsaufwand beim Daten-Crawling erheblich vereinfacht. In diesem Artikel wird erläutert, wie Sie mit PHP die Single-Thread- und Multi-Thread-Datenerfassung implementieren.

1. Single-Threaded-Datencrawlen

Single-Threaded-Datencrawlen bedeutet einfach, jede Seite der Zielseite nacheinander in einem Thread zu crawlen und dann Daten auf der Seite zu extrahieren und zu analysieren.

In PHP können Sie die cURL-Komponente verwenden, um Einzelseitendaten abzurufen. Hier ist ein einfaches Beispiel.

<?php

// 进行 cURL 初始化
$ch = curl_init();

// 设置 URL 和其他参数
curl_setopt($ch, CURLOPT_URL, "http://example.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

// 获取页面内容
$page_data = curl_exec($ch);

// 关闭 cURL 
curl_close($ch);

?>

Mit dem obigen Code können Sie den Homepage-Inhalt der angegebenen Website abrufen. Als nächstes können Sie die Simple HTML DOM-Komponente verwenden, um den Seiteninhalt zu analysieren und die erforderlichen Daten zu erhalten.

<?php
// 引入 Simple HTML DOM 组件
require_once('simple_html_dom.php');

// 获取页面内容
$page_data = file_get_html('http://example.com/');

// 获取某个节点
$node = $page_data->find('#content', 0);

// 获取节点文本
$text = $node->plaintext;

?>

Mit dem obigen Code können Sie den Textinhalt des Knotens mit der Inhalts-ID auf der Homepage der angegebenen Website abrufen.

2. Multi-Threaded-Datenerfassung

Die Einschränkung der Single-Threaded-Datenerfassung ist ihre langsame Geschwindigkeit, sie kann jedoch die Anforderungen in einfachen Datenerfassungsszenarien erfüllen. Wenn Sie jedoch mehr Daten benötigen, müssen Sie darüber nachdenken Verwenden Sie es im Multithread-Modus.

Das Prinzip der Multithread-Datenerfassung besteht darin, die Datenanforderung und Datenverarbeitung in mehrere Threads aufzuteilen und diese gleichzeitig auszuführen, was die Effizienz der gesamten Datenerfassung und -analyse verbessern kann. In PHP können Sie mehrere Methoden verwenden, um eine Multithread-Datenerfassung zu implementieren, z. B. die Verwendung mehrerer Curl-Komponenten, die Verwendung von Multiprozessmethoden usw. Hier ist ein Beispiel für die Verwendung von Curl-Multithreading.

<?php 

// 定义目标 URL 列表
$urls = array(
    'http://example.com/1.html',
    'http://example.com/2.html',
    'http://example.com/3.html',
    'http://example.com/4.html',
    'http://example.com/5.html'
);

// 线程数
$max_threads = 5;

$curlopt_array = array();

// 创建多个 cURL 组件
for ($i = 0; $i < $max_threads; $i++) {
    $ch[$i] = curl_init();
}

// 设置 cURL 参数
foreach ($urls as $index => $url) {
    $ch_index = $index % $max_threads;
    curl_setopt($ch[$ch_index], CURLOPT_URL, $url);
    curl_setopt($ch[$ch_index], CURLOPT_RETURNTRANSFER, 1);
    $curlopt_array[$ch_index][] = $ch[$ch_index];
}

// 处理所有 cURL 请求
$mh = curl_multi_init();

foreach ($curlopt_array as $ch_array) {
    foreach ($ch_array as $ch) {
        curl_multi_add_handle($mh,$ch);
    }
}

// 执行多线程请求
$running = NULL;
do {
    usleep(10000);
    curl_multi_exec($mh, $running);
} while ($running > 0);

// 关闭所有 cURL
foreach ($ch as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

// 关闭 cURL 多线程 handler
curl_multi_close($mh);

?>

Durch den obigen Code können mehrere Anforderungen gleichzeitig gesendet werden, wodurch die Funktion der Multithread-Datenerfassung realisiert wird. Anschließend können Sie die Simple HTML DOM-Komponente verwenden, um den Seiteninhalt zu analysieren und die erforderlichen Daten abzurufen.

<?php

// 定义目标 URL 列表
$urls = array(
    'http://example.com/'
);

// 定义线程数
$max_threads = 5;

// 定义处理函数
function handle_page_data($page_data) {
    // 解析 HTML 页面
    $html = str_get_html($page_data);
    // 获取节点
    $node = $html->find('#content', 0);
    // 获取节点文本
    $text = $node->plaintext;
    // 处理数据
    // ...
}

// 创建多个 cURL 组件
$ch = array();
for ($i = 0; $i < $max_threads; $i++) {
    $ch[$i] = curl_init();
}

// 设置 cURL 参数
$curlopt_array = array();
foreach ($urls as $index => $url) {
    $ch_index = $index % $max_threads;
    curl_setopt($ch[$ch_index], CURLOPT_URL, $url);
    curl_setopt($ch[$ch_index], CURLOPT_RETURNTRANSFER, 1);
    $curlopt_array[$ch_index][] = $ch[$ch_index];
}

// 处理 cURL 请求
$mh = curl_multi_init();

foreach ($curlopt_array as $ch_array) {
    foreach ($ch_array as $ch) {
        curl_multi_add_handle($mh,$ch);
    }
}

// 处理多线程请求
$running = NULL;
do {
    usleep(10000);
    curl_multi_exec($mh, $running);

    // 处理数据
    while ($done = curl_multi_info_read($mh)) {
        $info = curl_getinfo($done['handle']);
        $page_data = curl_multi_getcontent($done['handle']);
        handle_page_data($page_data);
        curl_multi_remove_handle($mh, $done['handle']);
        curl_close($done['handle']);
    }   
    
} while ($running > 0);

// 关闭所有 cURL 组件
foreach ($ch as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

// 关闭 cURL 多线程 handler
curl_multi_close($mh);

?>

Der obige Code ruft den Seiteninhalt auf Multithread-Weise ab und verarbeitet dann die Daten jeder Seite über eine benutzerdefinierte Funktion handle_page_data.

Zusammenfassung

In diesem Artikel werden die Single-Thread- und Multi-Thread-Methoden zur Implementierung der Crawler-Technologie mit PHP vorgestellt. Single-Threaded ist bequem und einfach zu verwenden, aber langsamer, und Multi-Threaded ist schneller, muss aber die Daten berücksichtigen Interaktion zwischen Komponenten und Umgang. In praktischen Anwendungen ist es notwendig, eine geeignete Lösung für die Datenerfassung und -analyse basierend auf spezifischen Anforderungen auszuwählen, um den Wert der Daten zu maximieren.

Das obige ist der detaillierte Inhalt vonGrundlegendes Crawler-Tutorial: Das PHP-Programm implementiert Single-Threaded- und Multi-Threaded-Daten-Crawling. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn