Вопрос по функции

Тема в разделе "PHP", создана пользователем Jess23, 22 окт 2019.

  1. Jess23

    Jess23

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    135
    Помогите разобраться с функцией парсера.

    Не удается получить список категорий донора. Парсер открывает страницу
    и ищет div с классом
    category, после чего должен отобразить весь список категорий, но по непонятным мне причинам данная функция не срабатывает, что с ней не так?

    PHP:
        private function GrandCatList($data)
        {
            
    $out = [];
            
    libxml_use_internal_errors(true);
            
    $this->dom->loadHTML($data);
            
    libxml_clear_errors();
            
    $divs $this->dom->getElementsByTagName('div');
            for(
    $i=0$i $divs->length$i++)
            {
             
                
    $div $divs->item($i);
                 
                if(
    $div->hasAttribute('class') && "category" === $div->getAttribute('class')) $out[] = [$div->getElementsByTagName('a')->item(1)->getAttribute('href'),$div->getElementsByTagName('a')->item(1)->nodeValue];
             
            }
            return 
    $out;
         
        }

     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Как именно не срабатывает?
    Что она сейчас возвращает? Есть какие-то ошибки?
     
  3. Jess23

    Jess23

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    135
    Она должна отобразить все категории, но она их не отображает. Пустой белый экран. Вроде все срабатывает но категорий нету и ошибок также.
     
  4. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    Значит на вход приходит пустая строка или html без классов category

    Вот полный аналог вашей функции просто для консоли. Выводит список.


    Возможно ваш парсер забанили по IP/User-Agent и поэтому ничего не приходит или отдаётся не то, что вы ожидаете
     
    Jess23 нравится это.
  5. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Так ваш код и не должен ничего выводить на экран.

    Чтоб вывести на экран результат работы функции надо сделать так:
    PHP:
    print_r($out); //Добавить эту строку
    return $out;