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

Ye11ow

Постоялец
Заблокирован
Регистрация
15 Дек 2017
Сообщения
132
Реакции
170
  • Автор темы
  • Заблокирован
  • #1
Добрый день знатоки.
Нужен скрипт который будет смотреть есть ли в исходном коде конкретный текст, если такое возможно.
Нужно иметь возможность менять код отслеживания и добавлять сайты, в случае нахождения что бы например писал напротив сайта что есть текст или нет.
Есть может у кого-то ?
 
Что-то такое? Ищет по ссылкам 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:
Вместо !== было ===, что не верно)
 
Последнее редактирование:
  • Автор темы
  • Заблокирован
  • #3
То что доктор прописал
Upd Правда иногда показывает что код есть на сайте на котором его точно нет
Upd2 Теперь постоянно показывает что код есть но его там точно нет
 
Последнее редактирование:
  • Автор темы
  • Заблокирован
  • #5
Глюк может или хз
в общем есть например 5 сайтов, на первом и третьем точно есть код, на 2,4 и 5 соответственно нет , открываю страничку со скриптом, он очень долго думает и выдает что на 1 есть код а на других нет, но на 3 точно есть.
меняю местами 1 и 3, на 3ем ( который был 1ым говорит есть код) на 1ом (который был 3им и там точно есть код говорит мол не найдено)
в чем может быть загвоздка ?
Спасибо
 
Глюк может или хз
в общем есть например 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 отдает
 
  • Автор темы
  • Заблокирован
  • #7
пробуйте 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 надо скачать и положить в папку со скриптом
 
Дело не в курле, а в том что его отсекает простейшая антибот защита, поэтому серьезные сайты им спарсить не выйдет.
Например в примере выше CURLOPT_USERAGENT стоит поставить актуальный, т.к. 23 файрфокс вышел сто лет назад.

пишет по всем сайтам fail
Для просмотра ссылки Войди или Зарегистрируйся: fail
после
bool(false) Для просмотра ссылки Войди или Зарегистрируйся: fail
ясен пень что fail, разве на этих сайтах есть текст '<h1>title</h1>' ?
 
Посмотрите что отдает file_get_contents. Дело в том, что если сайт не доступен или выдает ошибку, то он отдает пустую строку. Соответственно может быть не найдено. И file_get_contents не работает с https без дополнительной настройки. Смотрите в сторону CURL.
 
Назад
Сверху