Я построил простой веб-гусеничный элемент, который содержит содержимое страницы после <body>
. Это прекрасно, единственная проблема заключается в том, что он не следует ссылкам на странице, чтобы перейти на другие страницы, которые он рекурсивно сканирует.Web Crawler не соответствует ссылкам на странице
На выходе я вижу только содержимое страницы, которое было вручную указано для запуска искателя, и никаких признаков того, что он следит за ссылками.
Как я могу заставить его следить за ссылками, сканировать эти страницы и эхом их содержание?
Вот код:
<?php
error_reporting(E_ERROR);
define("CRAWL_LIMIT_PER_DOMAIN", 50);
$domains = array();
$urls = array();
function crawl($url)
{
global $domains, $urls;
$parse = parse_url($url);
$domains[ $parse['host'] ]++;
$urls[] = $url;
$content = file_get_contents($url);
if ($content === FALSE){
return;
}
$content = stristr($content, "<body>");
preg_match_all('/http:\/\/[^ "\']+/', $content, $matches);
// do something with content.
echo strip_tags($content);
foreach($matches[0] as $crawled_url) {
$parse = parse_url($crawled_url);
if (count($domains[ $parse['host'] ]) < CRAWL_LIMIT_PER_DOMAIN && !in_array( $crawled_url, $urls)) {
sleep(1);
crawl($crawled_url);
}
}
}
crawl('http://the-irf.com/hello/hello6.html');
?>
Update: Я предполагаю, что есть что-то не так с регулярным выражением (/ HTTP: // [^ «\ '] + /). Как я могу осуществлять регулярное выражение, которое следует все HREF ими всех якорей начинаются ли они с
http://
http:/www.
www.
https://
https://www.
или что-нибудь еще (например, как абсолютный путь файла-как index.html)? или есть лучший способ сделать это, что регулярное выражение ?
Значит, ваше регулярное выражение не работает? – kero
Даже не сказал, что регулярное выражение слишком далеко, однако ссылки не должны начинаться с 'http:' вообще. Вы знаете, что такое базовый URI в HTML? – hakre
Использование: http://simplehtmldom.sourceforge.net/ – user956584