Парсер новостей php?

Здравствуйте подскажите пожалуйста, в чем ошибка.
Парсю новости и записываю их в БД. Получается спарсить только одну страницу, подскажите пожалуйста что прописать чтоб парсилось указанное кол-во страниц, почему то цикл for не помогает, где я ошибся ?
<?php

   
  require 'db.php'; // подключаем библиотеку ReadbeenPHP и соединяемся с базой данных
  require ('phpQuery-onefile.php');  // подключаем phpQuery

for ($i=1; $i <=2 ; $i++) { 


  define('HOST','http://karabanoff.ru/all_news/page/'.$i); // сюда мы вписываем адрес сайта-донора, который необходимо спарсить 
 
  // R::wipe('post'); // удаляем все записи из таблицы post
  // R::wipe('postprev'); // удаляем все записи из таблицы postprev
 
  $data_site = file_get_contents(HOST); // получаем страницу сайта-донора
  $document = phpQuery::newDocument($data_site);
  $content_prev = $document->find('.body .news');
 

  // перебираем в цикле все посты
  foreach ($content_prev as $el) {
      // Парсим превьюшки статей
  $pq = pq($el); // pq это аналог $ в jQuery
  $date = $pq->find('.date')->text(); // парсим заголовок статьи 
  $t = $pq->find('.title')->text(); // парсим заголовок статьи 
  $pagetitle = $pq->find('.title')->text(); // парсим заголовок статьи 
  $link = $pq->find('.title')->attr('href'); // парсим ссылку на статью
  $txt = $pq->find('.text p'); // парсим текст в превью статьи
  $metadesc = '';
  $metakey = '';
  // $img = $pq->find('.wp-post-image')->attr('src'); // парсим ссылку на изображение в превью статьи

   // Записываем информацию о превьюшках в базу данных
  $post_prev = R::dispense('postprev'); 
      if(!empty($t)) $post_prev->t = strip_tags($t); // strip_tags удаляет HTML тэги из строки
      if(!empty($pagetitle)) $post_prev->pagetitle = strip_tags($pagetitle); // strip_tags удаляет HTML тэги из строки
      // if(!empty($link)) $post_prev->link = HOST.$link;
      $post_prev->metadesc = $metadesc;
      $post_prev->metakey = $metakey;
      if(!empty($txt)) $post_prev->txt = strip_tags($txt); 
      $post_prev->date = $date; 
      $post_prev->photo = '';
      $post_prev->vlink = '';
      $post_prev->type = 'news';
      $post_prev->antic = 0;
      $post_prev->expire_date = '2020-12-31';
      // if(!empty($img)) $post_prev->img = HOST.$img;     
      R::store($post_prev);
 
      // пробегаемся по всем ссылкам на посты и парсим контент из открытых статей
      if(!empty($link)) $data_link = file_get_contents(HOST.$link);
      $document_с = phpQuery::newDocument($data_link);
      $content = $document_с->find('.body');
       
      foreach ($content as $element) {
          $pq2 = pq($element);
          // $h1 = $pq2->find('.post-title h1'); // парсим главный заголовок статьи
          $text_all = $pq2->find('p'); // парсим контент часть статьи
      }
 
  // Записываем информацию о статьях в базу данных
  $post = R::dispense('post'); 
      if(!empty($t)) $post_prev->t = strip_tags($t);
      if(!empty($text_all)) $post->text = strip_tags($text_all); 
      R::store($post);
 
}
}

?>
  • Вопрос задан
  • 594 просмотра
Решения вопроса 1
slo_nik
@slo_nik Куратор тега PHP
Добрый день.
У Вас всегда будет одна страница.
Вы объявляете константу, а это величина неизменна.
for($i=1; $i <=2 ; $i++){
  define('HOST','http://karabanoff.ru/all_news/page/'.$i)
}

Поэтому она будет иметь всегда одно и тоже значение.
Вдобавок Вы получите NOTICE от php, что константа уже определена, так как Вы объявляете одну и туже константу при каждой итерации цикла.
Делайте это переменной.
for($i=1; $i <=2 ; $i++){
  $url = 'http://karabanoff.ru/all_news/page/'.$i;
}

Результат работы Вашего кода

5d00d528cab77943314111.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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