Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Recommended Posts

16.09.2023 в 16:06, Rassol2 сказал:

3) Мой модуль не может парсить эксель документы. Все же он создавался как парсер сайтов.

 

Зачем это нужно, если есть АОП ? Ответ только один: для экономии, чтобы не покупать два модуля, а обходиться одним...

А мне больше хотелось бы видеть реализацию работы с "кривыми" выгрузками xml/yml (без правки самих файлов модуля), которых не мало, а не дублирование того, что и так уже реализовано у других...

  • +1 1
Link to comment
Share on other sites


16.09.2023 в 08:33, Axelenz сказал:

 

Зачем это нужно, если есть АОП ? Ответ только один: для экономии, чтобы не покупать два модуля, а обходиться одним...

А мне больше хотелось бы видеть реализацию работы с "кривыми" выгрузками xml/yml (без правки самих файлов модуля), которых не мало, а не дублирование того, что и так уже реализовано у других...

Над этим думаю. 
Уже есть наброски парсера xml 2.0 который может ускорить процес обработки xml раз в 100 , только еше все на уровне моих внутренних бета тестов. Если вcе пройдет успешно то прокаю xml и реши вопрос с внесением правок в файл. Но во второй волне обновления парсера xml. 

  • +1 1
Link to comment
Share on other sites

16.09.2023 в 16:06, Rassol2 сказал:

3) Мой модуль не может парсить эксель документы. Все же он создавался как парсер сайтов.

Было бы круто. Хорошее решение было бы в одном модуле парсить все возможные форматы от поставщиков.

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

Да хотелось би еще функций больше,

Например, помимо парсинга с exel, еще парсинг в свои кастомные поля, я это средствами конечно кода решил, но хотелось бы уже в самом модуле

но все еще впереди, тут и так под капотом данного модуля не мало.

  • +1 1
Link to comment
Share on other sites


Прайсы в .xls это как анахронизм какой-то... Да, раньше почти все сайты в этом формате отдавали данные, но сейчас то xml/yml это давно уже формат де-факто... ну иногда ещё и CSV встречается, но то такое (формат полностью не стандартизирован)... 

Не думаю, что модулю это вообще нужно... вперёд лучше смотреть, а не оглядываться назад.

Link to comment
Share on other sites


16.09.2023 в 09:22, Axelenz сказал:

Прайсы в .xls это как анахронизм какой-то... Да, раньше почти все сайты в этом формате отдавали данные, но сейчас то xml/yml это давно уже формат де-факто... ну иногда ещё и CSV встречается, но то такое (формат полностью не стандартизирован)... 

Не думаю, что модулю это вообще нужно... вперёд лучше смотреть, а не оглядываться назад.

Если и будет загрузка прайс листов то только csv. Другое вообще пока не рассматриваю. Xml / yml уже есть. 

Link to comment
Share on other sites

Здравствуйте.

1. Почему-то парсер не перезаписывает файл, а добавляет строки в csv, то есть создаются дубли артикулов после каждого прохода. Как исправить?

2. Есть ли варианты результат выводить в гугл таблицы, а не файл? 

Edited by Gherman002321
Link to comment
Share on other sites


Зачем при отправке запроса "Парсинг в ИМ" удалять ссылки с ответом ошибок? Это же не позволяет с помощью скриптов устанавливать условие на такие ссылки. Конечно можно установить, но нагрузка на такое действие в разы выше, чем когда бы не удалялась ссылка и запускался скрипт для неё. Лучше пусть все ссылки попадают в массив или сделать настройку для возможности пропускать ссылки с ошибками, а в массиве уже можете установить условие не добавлять инфу в товар при ошибке (согласно условиям границ, оно и так ничего не добавит).

В "Настройки парсинга" не хватает установки регулярного выражения или установки возможности варианта (вариант 1|вариант 2) - меньше границ нужно будет создавать.

Link to comment
Share on other sites

19.09.2023 в 12:26, buslikdrev сказал:

В "Настройки парсинга" не хватает установки регулярного выражения или установки возможности варианта (вариант 1|вариант 2) - меньше границ нужно будет создавать.

 

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

Link to comment
Share on other sites


19.09.2023 в 04:26, buslikdrev сказал:

Зачем при отправке запроса "Парсинг в ИМ" удалять ссылки с ответом ошибок? Это же не позволяет с помощью скриптов устанавливать условие на такие ссылки. Конечно можно установить, но нагрузка на такое действие в разы выше, чем когда бы не удалялась ссылка и запускался скрипт для неё. Лучше пусть все ссылки попадают в массив или сделать настройку для возможности пропускать ссылки с ошибками, а в массиве уже можете установить условие не добавлять инфу в товар при ошибке (согласно условиям границ, оно и так ничего не добавит).

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

Скрытый текст

K0QP6GR.png


Если я правильно понял что вы имеете в виду.

 

19.09.2023 в 04:26, buslikdrev сказал:

В "Настройки парсинга" не хватает установки регулярного выражения или установки возможности варианта (вариант 1|вариант 2) - меньше границ нужно будет создавать.

Немного подробнее можете сказать что про что идет речь ?
Вы имеете в виду эти поля ?
 

Скрытый текст

JQmee52.png

 

Link to comment
Share on other sites

19.09.2023 в 13:53, Rassol2 сказал:

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

Скрытый текст
		//Отправка данных на собственные скрипты. 
		if(!empty($script_tasks)){
			
			$script_data = ['setting'=>$setting, 'browser'=>$browser, 'dn_id'=>$dn_id, 'urls'=>$urls];
			$script_data = $this->scriptController(1, $dn_id, $script_tasks, $script_data);
			$setting = $script_data['setting']; 
			$browser = $script_data['browser'];
			$urls = $script_data['urls'];
			unset($script_data);
		
		}

		//делаем мульти запрос
		$datas = $this->requestConstructor(1, $urls, $dn_id, $browser, $setting, 0);

  	foreach($datas as $key => $data){

			//Отправка данных на собственные скрипты. 
			if(!empty($script_tasks)){
				$script_data = ['setting'=>$setting, 'browser'=>$browser, 'dn_id'=>$dn_id, 'form'=>$form, 'permit'=>$permit, 'url'=>$link];
				$script_data = $this->scriptController(2, $dn_id, $script_tasks, $script_data);
				$setting = $script_data['setting']; 
				$browser = $script_data['browser'];
				$permit = $script_data['permit'];
				$form = $script_data['form'];
				unset($script_data);
			
			}

 

"Парсинг в ИМ" $this->requestConstructor( удаляет ссылку 404 в итоге её нельзя обработать при действиях 2 и 3. В результате приходится делать запрос на получение всех ссылок 404 и проводить с ними необходимые операции в действии 1. А для уменьшения данных в выборке, чтобы не повторять операции, нужно удалять ошибку 404 или добавлять свой столбец для установки проверки.

		$error = $this->getUrlToPars($script_data['dn_id'], $script_data['setting']['link_list'], '404');

		foreach ($error as $result) {
			/* необходимые операции с товаром по ссылке 404 */ 
		}

 

 

Этот код не даёт записать ошибку 301 в таблицу pars_link и без вариантов по 301 ссылку никак не обработать (не построить условие для товара).

Скрытый текст
  	//для деления ссылок по спискам.
  	if($data['http_code'] > 302){ 
  		$value['http_code'] = $data['http_code'];
  	} 

 

 

 

19.09.2023 в 13:53, Rassol2 сказал:

Немного подробнее можете сказать что про что идет речь ?
Вы имеете в виду эти поля ?

Да, эти поля.

 

У меня например, на разных страницах с одинаковым кодом есть отличие по городам, и мне не нужны все города, а только некоторые.
В итоге мне приходится делать:

Скрытый текст

граница 1 Текст начала парсинга:
<td class="_fact"  >Москва</td>{skip}<td  data-price-val="1"> <div class="pr" >

 

граница 2 Текст начала парсинга:
<td class="_fact"  >Смоленск</td>{skip}<td  data-price-val="1"> <div class="pr" >

 

А могло быть так:

Скрытый текст

граница 1 Текст начала парсинга:
<td class="_fact"  >{reg[#(Москва|Смоленск)#]}</td>{skip}<td  data-price-val="1"> <div class="pr" >

 

Link to comment
Share on other sites

19.09.2023 в 06:56, buslikdrev сказал:

Этот код не даёт записать ошибку 301 в таблицу pars_link и без вариантов по 301 ссылку никак не обработать (не построить условие для товара).

Это не ошибка, это ответ который гласит что страница перенесена на другой адрес, на постоянной основе.
Идете в настройки запросов и включаете переход по редиректам.
 

Скрытый текст

sJwmi0U.png

И модуль будет переходит и получать код страницы, и нинужно ни каких спец методов, и скриптов для этого. Это стандартный сценарий.
(кроме случаев где есть какой то хитрый код на js с проверкой браузера и получением кук и последующим редиректом)
Но в стандартен это обычная ссылка без особенностей.

PS. Вы бы с таким рвением как вы лезете в код модуля лезли в настройки и читали что вам доступно. Можете и в код не прийдется смотреть )

 

По второму вопросу, понятно.
Но на всякий случай спрошу, а через поиск замену почему не хотите решить это вопрос ?

Link to comment
Share on other sites

@buslikdrev Только желательно конструктивно.
Без гибких ответов по типу.
А зачем через поиск замену если можно было бы сделать как я показал.
Потому что такой ответ не имеет смысла, с таким успехом можно и через поиск замену решить вопрос.

В принципе я не против такого функционала, просто пока он не был востребован, в массе своей, и по этому его пока нет.

Link to comment
Share on other sites

  

19.09.2023 в 15:07, Rassol2 сказал:

В принципе я не против такого функционала, просто пока он не был востребован, в массе своей, и по этому его пока нет.

Всем плевать, вот и не востребован.

 

19.09.2023 в 15:04, Rassol2 сказал:

Идете в настройки запросов и включаете переход по редиректам.

Для обработки товара, нужно задать условие такое же, как и при 404. На сайте донора 301 идёт на категорию. Поэтому мне наоборот переход по редиректам отключить. В общем не узнать, в какой ссылке был переход - значит нужно велосипед делать для поиска ошибки в логах и дёргать файл лога каждый запрос (для обработки 301), как и таблицу pars_link (для обработки 404).

 

19.09.2023 в 15:04, Rassol2 сказал:

По второму вопросу, понятно.
Но на всякий случай спрошу, а через поиск замену почему не хотите решить это вопрос ?

Проще там задать условие, чем думать, как создать условие удаления всех тегов с ценой, если нет нужного города. Потом удаление всего кроме цены, если есть нужный город.

+ 2 условия минимум.

Link to comment
Share on other sites

19.09.2023 в 09:06, buslikdrev сказал:

Проще там задать условие, чем думать, как создать условие удаления всех тегов с ценой, если нет нужного города. Потом удаление всего кроме цены, если есть нужный город.

+ 2 условия минимум.

Тут я понимаю что мой ответ вам не понравится. Но я вынужден.
На данный момент этот вопрос можно решить через поиск замену, а востребованности нет. А значит пока что это не будет внедрено. Возможно в будущем.
 

19.09.2023 в 09:06, buslikdrev сказал:

Для обработки товара, нужно задать условие такое же, как и при 404. На сайте донора 301 идёт на категорию. Поэтому мне наоборот переход по редиректам отключить. В общем не узнать, в какой ссылке был переход - значит нужно велосипед делать для поиска ошибки в логах и дёргать файл лога каждый запрос (для обработки 301), как и таблицу pars_link (для обработки 404).

Это довольно специфический сценарий. И хорошо что вы смогли найти решение через скрипты, дергая логи и так далее. По праву универсальный модуль неправда ли. ;-)

Изменить это нельзя так как 301 и 302 ответ сервера, это не ошибка это констатация факта того что страница была перенесена.
И по подавляющем случаи этот просто перенос.
К примеру такой же ответ отдает опенкарт когда вы заходите по query string и вас переадресует на ЧПУ. Из за такой стандартной процедуры записывать в логи ошибку, делать отказ от обработки и помешать ссылку в список не обработанных будет крайне не правильно.
Но я рад что вы смогли найти свое личное решение этого вопроса. Это круто.:eek:

 

Цитата

Всем плевать, вот и не востребован.

Так и работает рынок. Если есть спрос появляется предложение.

Link to comment
Share on other sites

Внимание.
Мне нужен проект с xml где после делания файла будет 5000 + товаров. Нужно для тестирования ускорения работы парсинга xml.
Пришлите готовый проект с настроенным созданием товаров и тд. Буду признателен.

Link to comment
Share on other sites

19.09.2023 в 23:16, Rassol2 сказал:

Внимание.
Мне нужен проект с xml где после делания файла будет 5000 + товаров. Нужно для тестирования ускорения работы парсинга xml.
Пришлите готовый проект с настроенным созданием товаров и тд. Буду признателен.

Отписал в ЛС

Link to comment
Share on other sites


Настройки запроса/Собственные заголовки - не удаляется \r, а только \n

Link to comment
Share on other sites

Найден баг.

В модуле в последней версии найден баг с загрузкой файлов.
Поправлю к следующему обновлении. Сейчас файлы грузятся битые.
Обновление попробую сделать сегодня завтра.

  • +1 1
Link to comment
Share on other sites

21.09.2023 в 15:44, buslikdrev сказал:

Настройки запроса/Собственные заголовки - не удаляется \r, а только \n

Не понял что вы имеете в виду.

Link to comment
Share on other sites

Провел тесты, новой обработки xml думал смогу выжать несколько X скорости, но увы. Если у вас хороших хостинг то прирост скорости будет незначительный.
Если у вас слабый хостинг тогда прирост будет кратный.

Старая технология.

 

13466 ссылок ориентировочно будут обработаны через 55 минут и 47 секунд.
 

Скрытый текст

nuwwmtD.png

 

Новый подход

46 минуты 32 сек на том же обьеме работы.

Скрытый текст

66Taz24.png

 

Здесь я попробовал исключить веб запросы при обработке xml, это самое дорогое в парсинге.
Дорого как по времени так и по ресурсам. В новом подходе это будет исключено.

По мимо прироста скорости должно снизится потребление ресурсов, то есть ниже нагрузка. Что то же должно порадовать обладателей бюджетных хостингов.
Собственно прирост на производительном хостинге составил около 17% при понижении потребления, что не может не радовать.
Хотя я ожидал большего. Завтра закончу и выложу релиз, а от вас просьба замерить производительность.

Так как мои расчеты показывали больший прирост.

Link to comment
Share on other sites

22.09.2023 в 12:27, Rassol2 сказал:

Не понял что вы имеете в виду.

 

// fix
if ($script_data['browser']['header_list']) {
	foreach ($script_data['browser']['header_list'] as $key => $result) {
		$script_data['browser']['header_list'][$key] = trim($result);
	}
}
Link to comment
Share on other sites

Обновление v4.9-7_beta

 

1) Исправлена один недочет в парсинге файлов.
2) Ускорен париснг XML/YML примерно до 20%
 

Просьба, обратит внимание на скорость до обновления и после и описаться. Так как данная инновация не является финальной и все будет зависит от от вас.
Если не будет отзывов. Или не будет повышение производительности у вас, тогда данное изменение будет аннулировано.
Решение спорное и требует тестов в разных сценариях.

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

Link to comment
Share on other sites

Для тех кто хотел поиск замену на весь файл XML.
Решил попробовать внедрить и понял почему этого нет))

Если мы хотим сделать поиск замену на весь файл XML где то здесь.
 

Скрытый текст

VNgr70A.png

 

То сталкиваемся с большой проблемой.
Модуль не держит в памяти сразу весь xml а читает его построчно, а значит нельзя применить правило поиск замены к всему файлу.
Так сделано что бы модуль мог обрабатывать файлы большого обьема и не крашится из за нехватки ОЗУ.
 

Так что поиск замену можно применять только к нарезанным товарам.
Эта задача тоже пока не реализуем.

В теории это можно сделать, но на данный момент цель не оправдывает средства.

Link to comment
Share on other sites

24.09.2023 в 23:29, Rassol2 сказал:

В теории это можно сделать, но на данный момент цель не оправдывает средства.

А зачем поиск/замена на весь xml если это и так дальше реализовано в соответствующей вкладке ? Из-за ошибок в блоке категории возникают дальнейшие проблемы. Возможно ли сделать поиск/замену только для этого блока ? 

Link to comment
Share on other sites


24.09.2023 в 15:49, Axelenz сказал:

А зачем поиск/замена на весь xml если это и так дальше реализовано в соответствующей вкладке ? Из-за ошибок в блоке категории возникают дальнейшие проблемы. Возможно ли сделать поиск/замену только для этого блока ? 

Да возможно, но это супер нелогично.

я понимаю что вам хочется иметь решение проблемы с кривыми Id категорий, но подымать из за этого целый комплекс поиск замены со всеми вытекающими на подобие. 
Создания блока для поиск замены в дизайне. 
Хранить данные в базе. 
Выводить на странице. 
Обработка в пред просмотре. 
Обработка при нарезании. 
Эксопрт этих настроек.

Импорт этих настроек. 
 

под каждой из этих строк не малый обьем работы который нужно проделать и учитывать в будущих реализациях. 
 

И вот это все еше и не будет работать на весь файл а только на блок категорий. И это еше нужно объяснить клиентам. 
И самое досадное что это нужно просто что бы удалить parentID="1"

в одной категории. 
 

Если бы это хоть работало на весь файл, то были бы шансы что данный функционал найдет какое-то применение в будущем а так ….. 

 

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.