Задать вопрос
@driverx18

Оптимально ли я парсю данные?

Суть такая, приходит запрос боту ВК, бот связывается с нужной страничкой через CURL, и через PHPQuery вытаскивает текст (он маленький, 2-3 строчки), и кидает этот текст человеку ВК. Но кидается этот текст почему то очень долго..
Вот тут я в функции обращаюсь к нужному сайту
$ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36');
    $res = curl_exec($ch);
    return $res;


Функция парсинга:

function parse($val) {
   global $number;
   $document = phpQuery::newDocument(curlit($val, $number)); // тут передаю страницу на которую заходить
   $findelement = $document->find('.ml p'); // ищу в классе .ml параграф (это единственный текст в том классе)
   $text; // переменная для текста
   foreach($findelement as $element) {
      $pq = pq($element);
      $text = $pq->text(); // сюда записываю ту строчку текста
   }
  return $text;
}


Правильно ли я делаю, особенно с PHPQuery? Может это как то я по сложному и ресурсозатратному делаю? Просто ответ приходит в течение секунд 5-10, что действительно долго. Очень прошу помощи
  • Вопрос задан
  • 329 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@D3lphi
Задержка не из-за того, что вы не так парсите данные, а из-за cURL запроса. Уверен, что это он выполняется так долго. И это от вас не зависит. Собственно, что мешает взять и измерить время выполнения того или иного куска кода?
Ответ написан
glebovgin
@glebovgin
Full Stack Web Developer
Так определите какой этап занимает больше времени - на этапе curl или на этапе phpQuery.
Кроме этого я бы заменил phpQuery на чистый xpath.
Плюс на всякий случай добавил бы
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
Но это не для скорости.
Ответ написан
sanchezzzhak
@sanchezzzhak
Ля ля ля...
лучше получите html блок текста через регулярку в $parseText
и обрамляем его в html теги
$parseText= '<html><body>'. $parseText .'</body></html> ';

и запихиваем все phpQuery

парсеру будет легче построить дерево и найти нужный вам селектор.

или попробуйте nokogiri отличается тем что не строит дерево, а рекурсивно проходит по всем node аналогично работает как и XmlReader
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы