Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как записать картинки из переменной в phpQuery? [3]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (4): « 1 2 [3] 4 »   

> Без описания
webdeveloperrr
Отправлено: 06 Июня, 2017 - 21:09:30
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Июнь 2017  


Помог: 0 раз(а)




Строитель пишет:
webdeveloperrr пишет:
в СSV запись пошла все нормально. а картинки заменяют друг друга
Для картинок нужно изменить алгоритм определения имени. Счётчик, который я написал вчера, при каждом запуске скрипта стартует сначала, и так как картинка с именем 1_img.png уже была создана ранее, то при повторном запуске она перезаписывается.

Названия для картинок можно использовать "родные", можно генерировать какую-то уникальную строку, выбор за вами.


Лучше типа 048736356434.jpg
 
 Top
Строитель Модератор
Отправлено: 06 Июня, 2017 - 21:13:47
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




webdeveloperrr пишет:
Лучше типа 048736356434.jpg
Тогда можно к счётчику добавить метку времени. Пример напишу чуть позже, когда буду за ПК.
 
 Top
Строитель Модератор
Отправлено: 06 Июня, 2017 - 23:34:08
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Попробуйте этот вариант
Спойлер (Отобразить)
 
 Top
webdeveloperrr
Отправлено: 07 Июня, 2017 - 00:10:54
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Июнь 2017  


Помог: 0 раз(а)




Cпасибо! Все работает
 
 Top
Строитель Модератор
Отправлено: 07 Июня, 2017 - 00:15:23
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




webdeveloperrr, и ещё один совет - нужно избегать запросов к базе данных внутри циклов. У вас сейчас запись выглядит так:

$result = mysql_query ("INSERT INTO pars (img,name) VALUES ('$file', '$text')");

Её лучше вынести за пределы цикла. В цикле только "собрать" параметры для sql-запроса (пример):
Спойлер (Отобразить)
 
 Top
webdeveloperrr
Отправлено: 08 Июня, 2017 - 00:59:02
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Июнь 2017  


Помог: 0 раз(а)




Cпасибо изменю. Еще вопрос по циклу.У меня в цикле еще добавилась ссылка и если по ней перейти то там внутри такая же конструкция выборки. Как мне это реализовать?
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. foreach ($doc->find('.listing-card') as $article) {
  4.    $article = pq($article);
  5.  
  6.    $img = $article->find('.listing-thumb img')->attr('src');//Это первая выборка маленькая картинка
  7.  
  8.    $text = $article->find(".listing-basicinfo 'p' ");//Это первая выборка короткая новость
  9.  
  10.    $link = $article->find('.listing-basicinfo')->attr('href');//По этой ссылке надо перейти и так же сделать выборку
  11.  
  12.    $img2 = $article->find('.listing2-thumb img')->attr('src');//Это вторая выборка большая картинка
  13.  
  14.    $text2 = $article->find(".listing2-basicinfo 'p' ");//Это вторая выборка всей новости
  15.  
  16.  
  17.  
  18.  
  19.  

(Отредактировано автором: 08 Июня, 2017 - 01:19:55)

 
 Top
Строитель Модератор
Отправлено: 08 Июня, 2017 - 08:54:17
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Теоретически, сохранить код выборки в пользовательскую функцию, проверять гет параметры из строки запроса, и если был переход по ссылке, то вызывать нашу функцию с выборкой, передавая на её вход айди из строки запроса.
 
 Top
webdeveloperrr
Отправлено: 08 Июня, 2017 - 11:45:45
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Июнь 2017  


Помог: 0 раз(а)




Строитель пишет:
Теоретически, сохранить код выборки в пользовательскую функцию, проверять гет параметры из строки запроса, и если был переход по ссылке, то вызывать нашу функцию с выборкой, передавая на её вход айди из строки запроса.


Вы не могли бы помочь с кодом?
 
 Top
Строитель Модератор
Отправлено: 08 Июня, 2017 - 17:51:34
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




webdeveloperrr пишет:
Строитель пишет:
Теоретически, сохранить код выборки в пользовательскую функцию, проверять гет параметры из строки запроса, и если был переход по ссылке, то вызывать нашу функцию с выборкой, передавая на её вход айди из строки запроса.


Вы не могли бы помочь с кодом?
Могу попробовать, но мне нужно и ваше участие. Вы говорите, что в результат добавилась ссылка - в какой переменной она сейчас сохранена?
 
 Top
webdeveloperrr
Отправлено: 08 Июня, 2017 - 19:03:17
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Июнь 2017  


Помог: 0 раз(а)




Строитель пишет:
webdeveloperrr пишет:
Строитель пишет:
Теоретически, сохранить код выборки в пользовательскую функцию, проверять гет параметры из строки запроса, и если был переход по ссылке, то вызывать нашу функцию с выборкой, передавая на её вход айди из строки запроса.


Вы не могли бы помочь с кодом?
Могу попробовать, но мне нужно и ваше участие. Вы говорите, что в результат добавилась ссылка - в какой переменной она сейчас сохранена?



$link = думаю что там но я неправильно делаю пока выборку ссылки.Не могу на нее грамотно составить запрос
(Добавление)
webdeveloperrr пишет:
Строитель пишет:
webdeveloperrr пишет:
Строитель пишет:
Теоретически, сохранить код выборки в пользовательскую функцию, проверять гет параметры из строки запроса, и если был переход по ссылке, то вызывать нашу функцию с выборкой, передавая на её вход айди из строки запроса.


Вы не могли бы помочь с кодом?
Могу попробовать, но мне нужно и ваше участие. Вы говорите, что в результат добавилась ссылка - в какой переменной она сейчас сохранена?



$link = думаю что там но я неправильно делаю пока выборку ссылки.Не могу на нее грамотно составить запрос



$link = $article->find('a')->attr('href');

Теперь точно знаю, она там в $link

(Отредактировано автором: 08 Июня, 2017 - 19:04:01)

 
 Top
Строитель Модератор
Отправлено: 08 Июня, 2017 - 19:39:58
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




webdeveloperrr, распечатайте, плиз, значение переменной $link.
И ещё не помешало бы ваш код опубликовать.
 
 Top
webdeveloperrr
Отправлено: 08 Июня, 2017 - 20:33:59
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Июнь 2017  


Помог: 0 раз(а)




Строитель пишет:
webdeveloperrr, распечатайте, плиз, значение переменной $link.
И ещё не помешало бы ваш код опубликовать.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. header('Content-type: text/html; charset=utf8');
  4.  
  5. require 'curl/curl.php';
  6. require 'phpquery/phpQuery/phpQuery.php';
  7. include 'db.php';
  8.  
  9. $csv = 'file.csv'; // Название вашего CSV-файла
  10. $texts = [];
  11. $files = [];
  12. $time = time();
  13. $i = 0;            // Переменная-счётчик
  14.  
  15. $url = 'http://site.ru/index.php?page=search&sCategory=110';
  16. $file = file_get_contents($url);
  17.  
  18. $doc = phpQuery::newDocument($file);
  19.  
  20. foreach ($doc->find('.listing-card') as $article) {
  21.   $article = pq($article);
  22.  
  23.   $img = $article->find('.listing-thumb img')->attr('src');
  24.  
  25.   $text = $article->find(".listing-basicinfo 'p' ");
  26.  
  27.   $link = $article->find('a')->attr('href');
  28.  
  29.   $img2 = $article->find('.listing-thumb img')->attr('src');
  30.  
  31.   $text2 = $article->find(".listing-basicinfo 'p' ");
  32.  
  33.   echo "<img src='$img'>";
  34.   echo $link;'<br>';
  35.  
  36.      echo $text;
  37.      echo '<hr>';
  38.  
  39.   $file = 'img/'. $time . ++$i .'.jpg';
  40.   file_put_contents($file, file_get_contents($img,$img2));
  41.  
  42.   $texts[] = $text;
  43.   $files[] = $file;
  44.  
  45.   $result = mysql_query ("INSERT INTO pars (img,img2,name,name2) VALUES ('$file', '$text')");
  46.  
  47.   if ($result == 'true') {
  48.       echo "<p>succes!</p>";
  49.   } else {
  50.       echo "<p>fall!</p>";
  51.   }
  52. }
  53.  
  54. $list = [
  55.   $texts,
  56.   $files
  57. ];
  58.  
  59. $fp = fopen($csv, 'a');
  60.  
  61. foreach ($list as $fields) {
  62.   fputcsv($fp, $fields, ';', '"');
  63. }
  64.  
  65. fclose($fp);
  66.  
  67. ?>
  68.  
  69.  


$link= http://site[dot]ru/index.php?page=item&id=8278
 
 Top
Строитель Модератор
Отправлено: 08 Июня, 2017 - 21:59:51
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




webdeveloperrr, если очень обобщить, то код будет выглядеть примерно так:
Спойлер (Отобразить)
Имейте ввиду, это принцип, а не готовое решение.
 
 Top
webdeveloperrr
Отправлено: 08 Июня, 2017 - 22:19:48
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Июнь 2017  


Помог: 0 раз(а)




Строитель пишет:
webdeveloperrr, если очень обобщить, то код будет выглядеть примерно так:
Спойлер (Отобразить)
Имейте ввиду, это принцип, а не готовое решение.



Спасибо! Буду дома, проверю
(Добавление)
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. header('Content-type: text/html; charset=utf8');
  4.  
  5. require 'curl/curl.php';
  6. require 'phpquery/phpQuery/phpQuery.php';
  7. include 'db.php';
  8. // Сохраняем наш код в функцию
  9. function getData($url) {
  10.    $csv = 'file.csv'; // Название вашего CSV-файла
  11.    $texts = [];
  12.    $files = [];
  13.    $time = time();
  14.    $i = 0;            // Переменная-счётчик
  15.  
  16.    $url = 'http://site.ru/index.php?page=search&sCategory=110';
  17.      
  18.    
  19.    $file = file_get_contents($url);
  20.    
  21.    $doc = phpQuery::newDocument($file);
  22.    
  23.    foreach ($doc->find('.listing-card') as $article) {// первая выборка
  24.      //foreach ($doc->find('div#item-content ') as $article) {//вторая выборка
  25.      $article = pq($article);
  26.    
  27.      $img = $article->find('.listing-thumb img')->attr('src');
  28.    
  29.      $text = $article->find(".listing-basicinfo 'p' ");
  30.    
  31.      $link = $article->find('a')->attr('href');
  32.    
  33.      $img2 = $article->find('img.example-image ')->attr('src');
  34.    
  35.      $text2 = $article->find("div#description 'p' ")->text();
  36.    
  37.      echo "<img src='$img'>";'<br>';
  38.      echo "<img src='$img2'>";'<br>';
  39.      echo $link;'<br>';
  40.      echo $text;'<br>';
  41.      echo $text2;'<br>';
  42.      echo '<hr>';
  43.    
  44.      $file = 'img/'. $time . ++$i .'.jpg';
  45.      file_put_contents($file, file_get_contents($img,$img2));
  46.    
  47.      $texts[] = $text;
  48.      $texts[] = $text2;
  49.      $files[] = $file;
  50.    
  51.      $result = mysql_query ("INSERT INTO pars (img,name,name2) VALUES ('$file', '$text,$text2')");
  52.    
  53.      if ($result == 'true') {
  54.          echo "<p>succes!</p>";
  55.      } else {
  56.          echo "<p>fall!</p>";
  57.      }
  58.    }
  59.    
  60.    $list = [
  61.      $texts,
  62.      $files
  63.    ];
  64.    
  65.    $fp = fopen($csv, 'a');
  66.    
  67.    foreach ($list as $fields) {
  68.      fputcsv($fp, $fields, ';', '"');
  69.    }
  70.    
  71.    fclose($fp);
  72.  
  73.    // Возвращаем ссылку
  74.    return $link;
  75. }
  76.  
  77.  
  78. // Если был переход по ссылке
  79. if (isset($_GET['data'])) {
  80.    // Принимаем данные *
  81.    $data = strip_tags($_GET['data']);
  82.    // Передаём данные нашей функции (для записи в файлы и БД)
  83.    getData($data);
  84. } else {
  85.    // По умолчанию парсим как обычно
  86.    $url = 'http://site.ru/index.php?page=search&sCategory=110';
  87.    // Наша функция вернёт ссылку
  88.    $link = getData($url);
  89.    // Эту ссылку мы пропишем в теге и выведем в браузер
  90.    echo '<a href="?data='. $link .'">'. $link .'</a>';
  91. }
  92.  
  93.  
  94.  
  95.  



В этой конструкции пока парсятся первые две переменных $img $text
Переход по ссылке пока не идет
(Добавление)
$link = getData($url); Кстати ссылку возвращает правильную

(Отредактировано автором: 09 Июня, 2017 - 00:56:39)

 
 Top
Строитель Модератор
Отправлено: 08 Июня, 2017 - 23:13:13
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




webdeveloperrr пишет:
Переход по ссылке пока не идет
А обращение у вас каждый раз идёт к одному и тому же сайту? В ссылке изменяются только параметры? Если да, то нужно извлечь get-параметры из ссылки, и передать их в функцию. Только и в функции нужно подправить приём этих параметров.

Я не могу написать сразу рабочее решение, т.к. я не знаю, что вы грабите, и что вам нужно в итоге получить.

PS: И ещё, пользовательских функций у вас должно быть минимум три: одна для работы с phpQuery, вторая - для записи изображений в папку, и треться - для записи в csv-файл.
(Добавление)
webdeveloperrr, я дописал условие с регуляркой, по идее теперь переход по ссылке должен отрабатывать (демо-пример):
Спойлер (Отобразить)
 
 Top
Страниц (4): « 1 2 [3] 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB