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!