Nu ko, pamēģināsim "iejūgt" šai problēmā AI.
Ja ar “unikālu adrešu sarakstu” domā URL adreses viena domēna ietvaros (piemēram, visas lapas no
bez dublikātiem), tad PHP var izveidot vienkāršu "crawleri", kas:
Ja mērķis ir tikai savākt unikālas adreses no datubāzes vai masīva, tas ir daudz vienkāršāk:
Ja ar “unikālu adrešu sarakstu” domā URL adreses viena domēna ietvaros (piemēram, visas lapas no
Kods:
example.com- Sāk no sākuma URL.
- Nolasa lapas HTML.
- Atrod visas saites (
).Kods:<a href="...">
- Patur tikai tās, kas pieder tam pašam domēnam.
- Noņem dublikātus.
- Rekursīvi apmeklē vēl neapmeklētās lapas.
Kods:
<?php
$startUrl = "https://example.com";
$visited = [];
$queue = [$startUrl];
$domain = parse_url($startUrl, PHP_URL_HOST);
while (!empty($queue)) {
$url = array_shift($queue);
if (isset($visited[$url])) {
continue;
}
echo "Pārbauda: $url\n";
$visited[$url] = true;
$html = @file_get_contents($url);
if ($html === false) {
continue;
}
preg_match_all('/href=["\']([^"\']+)["\']/i', $html, $matches);
foreach ($matches[1] as $link) {
$absoluteUrl = $link;
// Relatīvās saites pārvērš absolūtās
if (strpos($link, 'http') !== 0) {
$absoluteUrl = rtrim($url, '/') . '/' . ltrim($link, '/');
}
$host = parse_url($absoluteUrl, PHP_URL_HOST);
if ($host === $domain && !isset($visited[$absoluteUrl])) {
$queue[] = $absoluteUrl;
}
}
}
echo "\nUnikālās adreses:\n";
foreach (array_keys($visited) as $url) {
echo $url . "\n";
}Kods:
$addresses = [
'/produkti',
'/kontakti',
'/produkti',
'/par-mums'
];
$unique = array_unique($addresses);
print_r($unique);Kods:
<?php
$startUrl = "https://kubele.lv";
$visited = [];
$queue = [$startUrl];
$domain = parse_url($startUrl, PHP_URL_HOST);
function normalizeUrl($url) {
// Noņem #anchor
$url = preg_replace('/#.*$/', '', $url);
// Noņem trailing slash
$url = rtrim($url, '/');
return $url;
}
while (!empty($queue)) {
$currentUrl = array_shift($queue);
$currentUrl = normalizeUrl($currentUrl);
if (isset($visited[$currentUrl])) {
continue;
}
echo "Skenē: $currentUrl\n";
$visited[$currentUrl] = true;
$html = @file_get_contents($currentUrl);
if ($html === false) {
continue;
}
preg_match_all('/href=["\'](.*?)["\']/i', $html, $matches);
foreach ($matches[1] as $link) {
// Izlaiž mailto:, javascript:, tel:
if (
str_starts_with($link, 'mailto:') ||
str_starts_with($link, 'javascript:') ||
str_starts_with($link, 'tel:')
) {
continue;
}
// Relatīvās adreses -> absolūtās
if (!preg_match('/^https?:\/\//', $link)) {
if (str_starts_with($link, '/')) {
$link = "https://$domain$link";
} else {
$link = $currentUrl . '/' . $link;
}
}
$link = normalizeUrl($link);
$host = parse_url($link, PHP_URL_HOST);
// Tikai viena domēna adreses
if ($host === $domain) {
if (!isset($visited[$link])) {
$queue[] = $link;
}
}
}
}
echo "\n=== Unikālās adreses ===\n";
foreach (array_keys($visited) as $url) {
echo $url . PHP_EOL;
}[/php]
"Kā cilvēks, kam trūkst pašcieņas, nav dīdzējs, bet nīcējs, tā arī tauta, kurai nav pašapziņas." K.Mīlenbahs

