Ищу простой парсер\чекер на 404

MR
На сайте с 21.12.2009
Offline
30
2301

Ищу парсер\чекер с таким функционалом. Даёшь ему список урлов вида, он по ним пробегает и если находит на странице заданный текст(например "404 Page not found") записывает этот урл в файл.

[Удален]
#1

http://home.snafu.de/tilman/xenulink.html

Create a text file with the URLs you want to check, one URL per row.

To load this file in Xenu, use Check URL list command in File menu.

Xenu will check all links on submitted URLs and generate the report.

4arger
На сайте с 17.12.2008
Offline
95
#2

urls.txt - файл с урлами


<?php
set_time_limit(0);
foreach(file("urls.txt") as $url) {
$ch = curl_init(trim($url));
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($status == 404) $result[] = $url;
}
file_put_contents("result.txt", $result);
?>
Антон Лавеев
На сайте с 31.10.2005
Offline
425
#3

4arger, я бы ещё CURLOPT_TIMEOUT выставил бы какой-нибудь разумный.

☠️☠️☠️
4arger
На сайте с 17.12.2008
Offline
95
#4

Tarry, согласен)))

PS поправил:


<?php
set_time_limit(0);
foreach(file("urls.txt") as $url) {
$ch = curl_init(trim($url));
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 10 секунд
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($status == 404) $result[] = $url;
}
file_put_contents("result.txt", $result);
?>
MR
На сайте с 21.12.2009
Offline
30
#5

puika, в режиме скана списка урлов, парсер бегает во внутренним ссылкам на странице и парсит их. И, если я правильно понял хелп, это не отключается. А результаты он экспортирует только в свой формат, т.е. нужные результаты выцепить не получается.

When running a scan for URL list, it is not possible to exclude "external" links from the scan like when checking a single URL!

4arger, залил на хостинг, запускаю, жду, result.txt не пополняется. Скрипт кладёт урлы в result.txt только если от них ответом приходит 404 ошибка? А хостиги, на которых лежат проверяемые сайты, в случае отсутствия файла или блокировки сайта, редеректят на свою страницу. Там и пишут, что "404 ". Но самого кода ошибки нет. Что нужно подправит в скрипте, чтобы он клал урлы в result.txt, если находит на странице какой-то текст(под каждую партию разный).

4arger
На сайте с 17.12.2008
Offline
95
#6

на выходе два файла: с ответом "200 ОК" и с другими ответами.


<?php
set_time_limit(0);
foreach(file("urls.txt") as $url) {
$ch = curl_init(trim($url));
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 10 секунд
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$status == 200 ? $result['200'][] = $url : $result['not200'][] = $url;
}
if(!empty($result['200'])) file_put_contents("200.txt", $result['200']);
if(!empty($result['not200'])) file_put_contents("not200.txt", $result['not200']);
?>
S2
На сайте с 07.01.2008
Offline
611
#7
4arger:
на выходе два файла: с ответом "200 ОК" и с другими ответами.

Бывает, что в Титле страницы написано 404, а отклик сервера 200. Либо идёт редирект на страницу 404.html которая даёт код 200. Т.е. настроено неправильно. Но такое тоже надо фильтровать. Ведь исправят же со временем. Т.е. если отдаёт код редиректа вместе с откликом 200 - то это тоже ошибка.

Не надо приписывать мне свои выводы, я имею ввиду только то, что написал. Лучшая партнёрка по футболкам/толстовкам (http://partnerka.kolorado.ru/?ref=1921540) Опрос: Проверить текст на уник - как? (/ru/forum/495885)
MR
На сайте с 21.12.2009
Offline
30
#8

4arger, спасибо). Последний вариант работает, страницы с редиректом идут в not200.txt.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий