Продолжаем парсить лоты torgi.gov.ru
Почему именно продолжаем? Предыдущие публикации: три, два, раз. Зачем: стала очевидна нехватка категории лота в общем файле выгрузки, добавлена структурированная выгрузка характеристик и процедуры поиска во взаимодействие через web. Обновлён список типов выгружаемых лотов.
Новые поля общего файла выгрузки
Ежечасную выгрузку актуальных лотов можно забрать тут. Небольшое извинение к пользователям MS Excel, чтоб прочесть файл понадобится применить импорт из файла через вкладку данные. Libre Office и подобное ПО достаточно комфортно распознают в нем (после разархивирования) табличные данные самостоятельно.
Категория (значения могут дополняться)
Собственно, и считать статистику (то, что было в третьей публикации) более интересно в разрезе категорий.
Структурированные значения характеристик
Карточки лотов имеют предустановленный список параметров к заполнению в зависимости от типа. Далеко не все лоты имеют полное заполнение, но недопустимо не воспользоваться структурированной информацией, если она есть. Теперь все имеющиеся значения параметров выгружаются в отдельный столбец.
Web поиск
В плане удобства ничего не поменялось - всё по-прежнему аскетично. Но для новой колонки характеристик добавлены две функции помогающие: findSquare - определять наличие и заполнение площади (квартиры, участка и т.п.), findVin - VIN (транспорта).
decimal(G)<500000&&!findVin(M).isEmpty() - вывести первые 100 лотов с ограничением по начальной сумме и с наличием значения VIN в характеристиках.
decimal(G)<500000&&findSquare(M)>3000 - вывести первые 100 лотов с ограничением по начальной сумме и с площадью от 3000м^2.
В зависимости от запроса, поиск может занимать достаточно длительное время (порядка полутора минут).
Дополнение
Ещё немного потренировавшись, добавил: equalsAny - любое совпадение из списка, containsAny - любое вхождение из списка, between - вхождение в диапазон, integer - приведение к целому. Возможность сортировать колонки результирующих данных в web.
https://oriri.ru/trg/find?condition=!E.concat(F).toUpperCase().contains('АРЕНДА')&&integer(L).equalsAny(50,77,78,47,23)&&I.containsAny('Земли','участки')&&findSquare(M)>1000&&decimal(G)<1000000 - регионы 50, 77, 78, 47 и 23; категории содержащие в своём названии 'Земли' 'участки'; площадь больше 10 соток; ограничение на стартовую сумму и запрет на наличие в описании 'аренда'.
Добавил скорости на поиск, теперь результат выдаётся практически мгновенно.