Странное поведение скрипта, где ошибаюсь?

D
На сайте с 28.06.2008
Offline
980
64

Написал парсер,  он берет из базы ФИО, заходит на один сайт и ищет ФИО ИПэшника

Вот код

 $count_result = count($result);
    for ($k=0;$k<$count_result;$k++) {
        $name_IP = "ИП " . $result[$k]["ishodnye_nameORG"];
        $chek_name = 1;
        $links_IP_array = [];
        //находим ссылки на нужных ИП в поиске сайта
        for ($i = 1; $i <= 20; $i++) {
            $url = "https://site.ru/?query=" . urlencode($name_IP) . "&page=$i";
            $refer = 'https://site.ru';
            $pars = getPageByUrl($url, $refer);
            $pq = phpQuery::newDocument($pars);
            $links = $pq->find('.org')->find('a');
            if (!empty($links)) {
                $chek_name_in_array = false;
                foreach ($links as $link) {
                    $pqLink = pq($link);
//принудительно перевожу ФИО в найденных ссылка в верхний регистр, удаляю пробелы, очищаю от мусора и заменяю пару букв ибо есть разные варианты написания
                    $ankor = trim(mb_strtoupper($pqLink->text()));
                    $ankor = str_replace('Ё', 'Е', $ankor);
                    $ankor = str_replace('Й', 'И', $ankor);
                    $ankor = str_replace(' ', '', $ankor);
                    $ankor = filter_var($ankor, FILTER_SANITIZE_STRING);
                    $href = $pqLink->attr('href');
                    //var_dump($href);
//тоже самое делаю с ФИО из нашей базы
                    $str = trim(mb_strtoupper($result[$k]["ishodnye_nameORG"]));
                    $str = str_replace('Ё', 'Е', $str);
                    $str = str_replace('Й', 'И', $str);
                    $str = str_replace(' ', '', $str);
                    $str = filter_var($str, FILTER_SANITIZE_STRING);
//сравниваю, если есть совпадение кидаю ссылку в массив
                    if (preg_match("~(.*)$str(.*)~m", $ankor, $match)) {
                        $links_IP_array[] = $href;
                        $chek_name_in_array = true;
                    }
                }
                //проверяем есть ли нужное на ФИО на странице
                if ($chek_name_in_array) {
                    $chek_name++;
                }
                //если счетчик цикла больше $chek_name на 3 и более раз, значит уже три раза не найдено совпадение на странице, прерываем цикл
                if ($i - $chek_name >= 3) {
                    echo "Поиск прерван на странице №" . $i . "\r\n";
                    break;
                }
            }
        }
        var_dump($links_IP_array);

В итоге каждый запуск на больших выборках (сотни) я каждый раз получаю разное кол-во записей и это мне не понятно.

Допустим в один заход по ипэшнику "Иванов Иван Иванович" парсер нашел 15 ссылок и загнал их в массив $links_IP_array, тут же повторяю прогон по этой же выборке - и ссылок уже 13.

Как так? В чем может быть косяк? Глюк плавающий, каждый раз разные ФИО не совпадают.... У меня уже нет мыслей...

D
На сайте с 28.06.2008
Offline
980
#1
Проблему вроде детектировал - страницы поиске на случайной итерации просто не загружались, вероятно сайт не справляется с такой скоростью. Поставлю слип в 1 сек.

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