Отслеживание кода на сайтах

Ye11ow

Постоялец
Регистрация
15 Дек 2017
Сообщения
132
Реакции
154
Добрый день знатоки.
Нужен скрипт который будет смотреть есть ли в исходном коде конкретный текст, если такое возможно.
Нужно иметь возможность менять код отслеживания и добавлять сайты, в случае нахождения что бы например писал напротив сайта что есть текст или нет.
Есть может у кого-то ?
 

Q_BASIC

Хранитель порядка
Регистрация
30 Ноя 2013
Сообщения
516
Реакции
1.239
Что-то такое? Ищет по ссылкам h1 с текстом Title
PHP:
$urls = [
    'https://yandex.ru/',
    'https://google.com/',
];

$needle = '<h1>Title</h1>';

foreach($urls as $url)
{
    $content = file_get_contents($url);

    echo $url . ': ';
    echo strpos($content, $needle) !== false ? 'Finded' : ' Not finded';
    echo ' on site<br />';
}

UPD:
Вместо !== было ===, что не верно)
 
Последнее редактирование:

Ye11ow

Постоялец
Регистрация
15 Дек 2017
Сообщения
132
Реакции
154
То что доктор прописал
Upd Правда иногда показывает что код есть на сайте на котором его точно нет
Upd2 Теперь постоянно показывает что код есть но его там точно нет
 
Последнее редактирование:

Ye11ow

Постоялец
Регистрация
15 Дек 2017
Сообщения
132
Реакции
154
Глюк может или хз
в общем есть например 5 сайтов, на первом и третьем точно есть код, на 2,4 и 5 соответственно нет , открываю страничку со скриптом, он очень долго думает и выдает что на 1 есть код а на других нет, но на 3 точно есть.
меняю местами 1 и 3, на 3ем ( который был 1ым говорит есть код) на 1ом (который был 3им и там точно есть код говорит мол не найдено)
в чем может быть загвоздка ?
Спасибо
 

Q_BASIC

Хранитель порядка
Регистрация
30 Ноя 2013
Сообщения
516
Реакции
1.239
Глюк может или хз
в общем есть например 5 сайтов, на первом и третьем точно есть код, на 2,4 и 5 соответственно нет , открываю страничку со скриптом, он очень долго думает и выдает что на 1 есть код а на других нет, но на 3 точно есть.
меняю местами 1 и 3, на 3ем ( который был 1ым говорит есть код) на 1ом (который был 3им и там точно есть код говорит мол не найдено)
в чем может быть загвоздка ?
Спасибо
Если у тебя не большой список адресов, скрипт не должен долго грузиться, возможно не получается получить доступ к какому-то сайту.

Попробуй так:
PHP:
$urls = [
    'https://yandex.ru/',
    'https://google.com/',
];

$needle = '<h1>Title</h1>';

foreach($urls as $url)
{
    $content = file_get_contents($url);
  
    // var_dump($content);
  
    if ($content === false)
    {
        echo $url . ': fail<br />';
        continue;
    }
  
    echo $url . ': ';
    echo strpos($content, $needle) !== false ? 'Finded' : ' Not finded';
    echo ' on site<br />';
}

Если не заработает - раскомментируй var_dump, смотри что file_get_contents отдает
 

Ye11ow

Постоялец
Регистрация
15 Дек 2017
Сообщения
132
Реакции
154

steelfeet

Создатель
Регистрация
3 Июн 2019
Сообщения
24
Реакции
14
пробуйте curl, file_get_contents может не работать с Для просмотра ссылки Войди или Зарегистрируйся

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // возвращает веб-страницу
curl_setopt($ch, CURLOPT_HEADER, 0); // не возвращает заголовки
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // переходит по редиректам
curl_setopt($ch, CURLOPT_AUTOREFERER, true); // иногда помогает при скачивании, когда 403

curl_setopt($ch, CURLOPT_ENCODING, ""); // обрабатывает все кодировки
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // таймаут ответа
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
curl_setopt ($ch, CURLOPT_CAPATH, dirname(__FILE__));

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0'); // user agent
curl_setopt($ch, CURLOPT_URL, $url);

$content = curl_exec($ch);
curl_close($ch);

Все это вместо: $content = file_get_contents($url);
cacert.pem надо скачать и положить в папку со скриптом
 

Minor

Постоялец
Регистрация
16 Авг 2012
Сообщения
259
Реакции
111
Дело не в курле, а в том что его отсекает простейшая антибот защита, поэтому серьезные сайты им спарсить не выйдет.
Например в примере выше CURLOPT_USERAGENT стоит поставить актуальный, т.к. 23 файрфокс вышел сто лет назад.

пишет по всем сайтам fail
Для просмотра ссылки Войди или Зарегистрируйся: fail
после
bool(false) Для просмотра ссылки Войди или Зарегистрируйся: fail
ясен пень что fail, разве на этих сайтах есть текст '<h1>title</h1>' ?
 

garphild

Постоялец
Регистрация
19 Май 2009
Сообщения
60
Реакции
32
Посмотрите что отдает file_get_contents. Дело в том, что если сайт не доступен или выдает ошибку, то он отдает пустую строку. Соответственно может быть не найдено. И file_get_contents не работает с https без дополнительной настройки. Смотрите в сторону CURL.
 
Сверху