Ich versuche ein Skript zu erstellen, das alle Links auf einer Website crawl Es gibt nur ein kleines Problem: Ich habe es auf verschiedenen Seiten getestet, aber das Ergebnis ist nicht das Gleiche und einige Links wurden nicht gekrochen ich weiß nicht, warum und so frage ich diese FrageZu viele foreach oder Verbindungszeitüberschreitung? T
hier ist der Code:
$list = array();
$count = 0;
function crawl_page($url) {
global $list, $count;
if(isset($list[$url])) {
if($list[$url] == true) {
return;
}
}
$list[$url] = true;
$dom = new DOMDocument('1.0');
@$dom->loadHTMLFile($url);
// I wrote this for not following other websites, it's so rude but it works
if(!strpos($url, "example.com")) {
return;
}
$anchors = $dom->getElementsByTagName('a');
foreach($anchors as $element) {
$href = $element->getAttribute('href');
if(0 !== strpos($href, 'http')) {
$path = '/' . ltrim($href, '/');
if(extension_loaded('http')) {
$href = http_build_url($url, array('path' => $path));
} else {
$parts = parse_url($url);
$href = $parts['scheme'] . '://';
if (isset($parts['user']) && isset($parts['pass'])) {
$href .= $parts['user'] . ':' . $parts['pass'] . '@';
}
$href .= $parts['host'];
if (isset($parts['port'])) {
$href .= ':' . $parts['port'];
}
$href .= $path;
}
}
if(!array_key_exists($href, $list)) {
$list[$href] = false;
}
}
$count++;
echo "$count $url<br>";
foreach($list as $asd => $seen) {
crawl_page($asd);
}
}
crawl_page('http://www.example.com');
Es ist nicht wahr, dass die Funktion nie endet, die Links, die bereits analysiert werden in der Array $ Liste –
Abbildung Sprache gespeichert werden. Es hängt schließlich davon ab, wie viele Links die Seite hat. Wie auch immer, du hast Probleme damit, also sieh dir die Links an, die ich gepostet habe. –