CRM-система для УК и ТСЖ

ГКН - как добыть программно?

Будете спамить рекламой - будем нещадно банить)))
Сообщение
Автор
virus_mvs
Бывалый
Сообщений: 325
Зарегистрирован: 21 май 2015, 12:42
Откуда: Пермский край
Благодарил (а): 101 раза
Поблагодарили: 110 раза

ГКН - как добыть программно?

#21 Сообщение virus_mvs » 07 дек 2016, 11:24

two_oceans писал(а):Ну, я понимаю когда там все "точнейшие" детали, которые служба Росреестра собирала "потом и кровью" - за деньги. Хотя по такой логике должны возвращать деньги за каждый найденный "косяк". Еще понимаю когда с ФИО - тогда по полномочиям. Но соответствие КН и адреса квартиры?
Тогда может быть так - поставить "в справочной информации" поиск по всему городу и медленно раз в минуту программно "листать" странички и сохранять к себе в базу. А потом уже из своей базы всякими фильтрами выцеплять.

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

Sergey Cheban
Стажер
Сообщений: 112
Зарегистрирован: 05 ноя 2016, 07:45
Благодарил (а): 55 раза
Поблагодарили: 60 раза

ГКН - как добыть программно?

#22 Сообщение Sergey Cheban » 13 дек 2016, 20:32

Дамир писал(а):Народ, поделитесь - кто как добывает ГКн-ы для квартир ?

1. Идём в "информационный ресурс ГКН": https://rosreestr.ru/wps/portal/p/cc_ib ... resurs_GKN. Авторизуемся с помощью ЕСИА, платим деньги за 100 запросов, хотя нам понадобится только один.
2. Вводим кадастровый номер здания (его можно узнать, например, запросив кадастровый паспорт земельного участка).
3. Заказываем кадастровую выписку (важно: не кадастровый паспорт).
4. В ответе будет XML. В этом XML - вот такие примерно записи:

Код: Выбрать все

<Flat CadastralNumber="47:07:9999999:9999" >
<Area>77.7</Area>
<PositionInObject>
<Levels>
<Level Number="5" Type="01">
<Position NumberOnPlan="9999">
</Position>
</Level>
</Levels>
</PositionInObject>
</Flat>

В данном случае - это квартира 9999, имеющая номер 47:07:9999999:9999 и расположенная на пятом этаже.
5. Среди этих записей будет мусор: номера, снятые с учёта, загадочные квартиры без номеров, квартиры, расположенные на двух этажах и т.п. Это всё придётся чистить руками, запрашивая информацию в онлайне по конкретным кадастровым номерам.
6. Если прогнать этот XML через сервис визуализации (https://rosreestr.ru/wps/portal/cc_vizualisation), то информация о номерах квартир потеряется. Так что - выковыривайте напрямую из xml.
7. Я для выковыривания номеров из XML использовал вот такой корявый питоновский скрипт (да, квартиры в доме нумеруются с 761):

Код: Выбрать все

import xml.etree.ElementTree
import sys
import codecs
import re

def main(infiles, outfile):
    validFlatNumber = re.compile(u"^[0-9]+(-\u041d)?$")
    f = codecs.open(outfile, "w", encoding="utf-8")
    flatDict = dict()
    for infile in infiles:
        root = xml.etree.ElementTree.parse(infile).getroot()
        namespaces = {'xmlns': 'urn://x-artefacts-rosreestr-ru/outgoing/kvoks/2.0.5'}
        realty = root.find('xmlns:Realty', namespaces)
        building = realty.find('xmlns:Building', namespaces)
        flats = building.find('xmlns:Flats', namespaces)
        for flat in flats.findall('xmlns:Flat', namespaces):
            area = flat.find('xmlns:Area', namespaces)
            positionInObject = flat.find('xmlns:PositionInObject', namespaces)
            levels = positionInObject.find('xmlns:Levels', namespaces)
            countNumbers = 0
            for level in levels.findall('xmlns:Level', namespaces):
                position = level.find('xmlns:Position', namespaces)
                number=position.get('NumberOnPlan')
                if validFlatNumber.match(number):
                    countNumbers += 1
                    #f.write(u"{0}, {1}, {2}\n".format(flat.get('CadastralNumber'), area.text, number))
                    if not number in flatDict:
                        flatDict[number] = list()
                    flatDict[number].append(flat.get('CadastralNumber'))
                else:
                    f.write(u"{0}\n".format(number))
                    pass
            if countNumbers != 1:
                f.write(u"{0} - {1}\n".format(flat.get('CadastralNumber'), area.text))

    for i in range(761, 1436):
        if not str(i) in flatDict or len(flatDict[str(i)]) != 1:
            f.write("{0}\n".format(i))

if __name__ == '__main__':
    sys.exit(main([sys.argv[2]], sys.argv[3]))

МихаилИгоревич
Стажер
Сообщений: 139
Зарегистрирован: 24 фев 2016, 12:34
Благодарил (а): 16 раза
Поблагодарили: 38 раза

ГКН - как добыть программно?

#23 Сообщение МихаилИгоревич » 14 дек 2016, 09:02

Таких парсеров пруд пруди, у нас на VB написан, очень простой, и очень корявый)) Тут задачу не в выковыривании надо ставить, а в бесперебойном получении этих паспортов и справок. Несколько человек на форуме знают как это делать, но не раскроют секрета))

Аватар пользователя
Егор
Модератор
Сообщений: 3931
Возраст: 40
Зарегистрирован: 19 авг 2014, 16:37
Откуда: Гатчина
Благодарил (а): 751 раза
Поблагодарили: 2184 раза
Контактная информация:

ГКН - как добыть программно?

#24 Сообщение Егор » 14 дек 2016, 09:36

МихаилИгоревич писал(а):Таких парсеров пруд пруди, у нас на VB написан, очень простой, и очень корявый)) Тут задачу не в выковыривании надо ставить, а в бесперебойном получении этих паспортов и справок. Несколько человек на форуме знают как это делать, но не раскроют секрета))

Да ладно тебе ... Вопрос вовсе не в получении - она как раз примитивна, а в качественном выковыривании, что совсем нетривиально очень часто.
Вчера вот разбирали район один, там нет улицы зато есть более десятка вариантов написания района, в т.ч просто пустое место или несколько пробелов. :)
Вот и автоматизируй это. Часто хочется просто атомизировать криворуких и безголовых сотрудников РР за такую бездарную работу.

МихаилИгоревич
Стажер
Сообщений: 139
Зарегистрирован: 24 фев 2016, 12:34
Благодарил (а): 16 раза
Поблагодарили: 38 раза

ГКН - как добыть программно?

#25 Сообщение МихаилИгоревич » 14 дек 2016, 09:46

Егор писал(а):
МихаилИгоревич писал(а):Таких парсеров пруд пруди, у нас на VB написан, очень простой, и очень корявый)) Тут задачу не в выковыривании надо ставить, а в бесперебойном получении этих паспортов и справок. Несколько человек на форуме знают как это делать, но не раскроют секрета))

Да ладно тебе ... Вопрос вовсе не в получении - она как раз примитивна, а в качественном выковыривании, что совсем нетривиально очень часто.
Вчера вот разбирали район один, там нет улицы зато есть более десятка вариантов написания района, в т.ч просто пустое место или несколько пробелов. :)
Вот и автоматизируй это. Часто хочется просто атомизировать криворуких и безголовых сотрудников РР за такую бездарную работу.

Ну у нас все по проще, у нас мало ошибок, но все равно бывает. Где они есть нужно руками смотреть, но все же по моему мнению выковыривать данные между двумя тэгами гораздо проще, чем устраивать множество запросов к серверу программно, т.к. выглядит это как минимум подозрительно. Я конечно предполагаю, что можно прям не выписками а потоком получать xml, но вот как это сделать не могу понять, но очень, очень хочется))

Аватар пользователя
Егор
Модератор
Сообщений: 3931
Возраст: 40
Зарегистрирован: 19 авг 2014, 16:37
Откуда: Гатчина
Благодарил (а): 751 раза
Поблагодарили: 2184 раза
Контактная информация:

ГКН - как добыть программно?

#26 Сообщение Егор » 14 дек 2016, 09:49

МихаилИгоревич писал(а):Я конечно предполагаю, что можно прям не выписками а потоком получать xml, но вот как это сделать не могу понять, но очень, очень хочется))

Потоком нельзя. Но это самая простая вещь.
А вот про мало ошибок. Когда мы делали у вас Выборгский район, там было всё очень прилично, кроме проблемы с литерами (когда в ГКН дом один, а лицензия на 2 дома - А и Б).
А вот дойдя до Адмиралтейского ... Мы там круто встряли на старом фонде с кучей нежилых и явно левых помещений. + питерская фишка с ОДИ в ГКН.
Так, что не весь Питер одинаково полезен.

two_oceans
Бывалый
Сообщений: 438
Зарегистрирован: 30 сен 2016, 17:17
Благодарил (а): 386 раза
Поблагодарили: 351 раза

ГКН - как добыть программно?

#27 Сообщение two_oceans » 15 дек 2016, 12:17

МихаилИгоревич писал(а):Источник цитаты Таких парсеров пруд пруди, у нас на VB написан, очень простой, и очень корявый))
У меня аналогично на VBScript - там организовать HTTP(S) запрос легче легкого. Грубый, потому что не всегда нужно обрабатывать xml или правильные структуры тегов html - иногда на сайтах такого напишут... браузер-то как-то проглатывает, а вот остальные программы могут и подавиться. Так что в функцию передается исходная строка и 2-3 строки поиска (одна строка - начало - уникальная в исходной строке, вторая строка - конец, третья используется, если после первой надо пропустить часть текста) возвращается часть между первой и второй (если третьей нет) либо между третьей и второй (если третья есть). Для XML это меньше подходит из-за пространств имен, но в принципе и таким грубым кривым способом можно вытащить данные.
Sergey Cheban писал(а):Источник цитаты платим деньги за 100 запросов, хотя нам понадобится только один
Это мне особенно понравилось.
Отдельное спасибо за детальное описание. Как бы дело не в том чтобы выписку получить - тут уже есть сервис(ы), который(е) уже все в Эксель сведет(ут) и базово мусор отфильтрует(ют). Ничего не имею против такого бизнеса - но в выписке много всего лишнего - тот же этаж или площадь квартиры, собственники и т.д. Что, собственно и стоит денег.
Если нужен только ГКН , то начинать с получения выписки примерно как палить из пушки по воробьям. Справочная информация в этом смысле больше подходит. Но, как справедливо тут заметили, без остальной информации крайне сложно отсеять мусор от действительных номеров.
Одну подсказку тут тоже упомянули - в ЕГРП номера нормальные, в ГКН всякие разные. Вывод - если есть такой же номер из ЕГРП, то выше вероятность, что номер нормальный. Полагаю, они могут быть оба устаревшими, так что 100% гарантии это не дает. Но все-таки будет некоторое стартовое значение которое можно попробовать загрузить в ГИС. Если не подошло, то точно нужно заказать платную выписку.
МихаилИгоревич писал(а):Источник цитаты чем устраивать множество запросов к серверу программно, т.к. выглядит это как минимум подозрительно
Вот с этим я частично соглашусь и частично не соглашусь. Серверы именно для того и существуют, что отвечать на запросы - в этом смысле мне непонятно чего Вы боитесь. Уточню, что человек html мысленно не воспринимает и браузер - тоже программа, как правило посылающая от 16 до 64 запросов одновременно!Серьезно, сейчас практически на любой странице кроме собственно html кода есть пяток таблиц стилей, десяток скриптов, с полсотни картинок (в том числе смайлики и аватары, которые не группируются), у некоторых даже свой шрифт для сайта (например символ рубля нарисовать). Вы же не думаете, что все эти файлы передаются без запросов к серверу?
Ограничение на соединения поставлено не из-за серверов, а из-за количества "полуоткрытых" соединений в Windows - если открыть больше, то операционная система будет выдавать на них ошибку. И даже когда Вы думаете что страничка загрузилась - по факту браузер продолжает время от времени тянуть данные через одно-два соединения (да, различные миниатюры - для закладок, для iPhone в разном разрешении; ротация баннеров; проверка наличия новых сообщений в контакте).
Более того, с помощью ловкости рук и специальных настроек браузера (переключение на следующую вкладку по нажатию клавиши и автоматическая отправка формы/обновление страницы после активации вкладки) можно отправить 10-20 запросов в секунду исключительно руками, не прибегая к скриптам (так например отправляют нападения в некоторых браузерных играх). Итого, ни один сервер ничего "не заподозрит", получив два-три десятка запросов в 1 секунду - это вписывается в характерное для браузеров поведение.

Есть идея как стать "еще милее более похожим" на браузер: в исходящем запросе можно указать 2 (почти взаимоисключающих по смыслу) заголовка - "If-Modified-Since: (дата)" и "Pragma: no-cache". Первый придаст сходства с запросами браузера (так браузер обновляет кэш) - сервер ответит 200 и содержимое страницы если страница изменилась или 304 без содержимого если не изменилась. Второй, если получен от браузера, обязывает сервер выдать страницу, даже если она не изменилась (то есть браузер ее вроде как не поместил в кэш и надо снова отправить). В свое время я платил за интернет по трафику и немало поломал голову куда же уходит трафик, в итоге обнаружил причину в таком сочетании заголовков. Убрал прагму и стало ощутимо дешевле. :lol:

С другой стороны, ясно, что нужно знать меру - 10-20 запросов отправленных в секунду не обрушат сервер, если их и было 20 штук всего. Или если вы отправите 2 тысячи запросов за 2 суток (раз в полторы минуты если округлить), то тоже ничего страшного. Но если отправить 2 тысячи запросов за полчаса (1800 секунд; да с учетом других таких "умников"), то серверу придется туго и конечно вас начнут банить.

besfamilnij
Новичок
Сообщений: 3
Зарегистрирован: 03 ноя 2016, 15:42
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

ГКН - как добыть программно?

#28 Сообщение besfamilnij » 13 янв 2017, 23:15

Собираю номера через iMacros для Firefox.
В файле doma.csv улица, дом, тип улицы (проспект, переулок, проезд и т.д.)
Воспроизвожу циклически, в зависимости от количества домов в doma.csv, потом разгребаю данные из kadastr.csv

Код: Выбрать все

for (i = 1; i <= 2; i++){
var macros = '';
var macros2 = '';
var macros3 = '';
var n = '\n';
macros += 'CLEAR' + n;
macros += 'SET !EXTRACT_TEST_POPUP NO.' + n;
macros += 'SET !DATASOURCE_DELIMITER ;' + n;
macros += 'SET !DATASOURCE C:\\111\\doma.csv' + n;
macros += 'SET !ERRORIGNORE YES' + n;
macros += 'SET !DATASOURCE_COLUMNS 3' + n;
macros += 'SET !DATASOURCE_LINE '+ (i+1) + n;
macros += 'SET !LOOP 1' + n;
macros += 'URL GOTO=https://rosreestr.ru/wps/portal/online_request' + n;
macros += 'TAG POS=4 TYPE=INPUT:RADIO FORM=NAME:ns_Z7_01HA1A42KG4D30A3BUVH3O0000_searchForm ATTR=NAME:search_type' + n;
macros += 'TAG POS=1 TYPE=SELECT FORM=NAME:ns_Z7_01HA1A42KG4D30A3BUVH3O0000_searchForm ATTR=NAME:src_object CONTENT=%1' + n;
macros += 'TAG POS=1 TYPE=SELECT FORM=NAME:ns_Z7_01HA1A42KG4D30A3BUVH3O0000_searchForm ATTR=NAME:street_type CONTENT=%str1' + n;
macros += 'TAG POS=1 TYPE=SELECT FORM=NAME:ns_Z7_01HA1A42KG4D30A3BUVH3O0000_searchForm ATTR=NAME:subject_id CONTENT=%120000000000' + n;
macros += 'TAG POS=1 TYPE=SELECT FORM=NAME:ns_Z7_01HA1A42KG4D30A3BUVH3O0000_searchForm ATTR=NAME:street_type CONTENT=%str{{!COL3}}' + n;
macros += 'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:ns_Z7_01HA1A42KG4D30A3BUVH3O0000_searchForm ATTR=NAME:street CONTENT={{!COL1}}' + n;
macros += 'TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:ns_Z7_01HA1A42KG4D30A3BUVH3O0000_searchForm ATTR=NAME:house CONTENT={{!COL2}}' + n;
macros += 'TAG POS=1 TYPE=BUTTON FORM=NAME:ns_Z7_01HA1A42KG4D30A3BUVH3O0000_searchForm ATTR=TXT:Сформировать<SP>запрос<SP>»' + n;
macros += 'TAG POS=1 TYPE=TABLE ATTR=TXT:Источник<SP>Адрес<SP>Кадастровый<SP>номер<SP>Условный<SP>ном* EXTRACT=TXT' + n;
macros += 'SAVEAS TYPE=EXTRACT  FOLDER="C:\\111\\" FILE="kadastr.csv"' + n;
macros += 'TAG POS=1 TYPE=IMG ATTR=SRC:https://rosreestr.ru/wps/PA_RRORSrviceExtended/images/common/controls/arrows_right.gif' + n;
macros += 'WAIT SECONDS=1' + n;
macros += 'TAG POS=1 TYPE=TABLE ATTR=TXT:Источник<SP>Адрес<SP>Кадастровый<SP>номер<SP>Условный<SP>ном* EXTRACT=TXT' + n;
macros += 'SAVEAS TYPE=EXTRACT  FOLDER="C:\\111\\" FILE="kadastr.csv"' + n;

iimPlayCode(macros);

for (;;){

    if(iimPlayCode('TAG POS=1 TYPE=IMG ATTR=SRC:https://rosreestr.ru/wps/PA_RRORSrviceExtended/images/common/controls/arrows_right.gif')>0){ //<--- Если найдена надпись, то выполняем то что в след. скобках,
        //если  найдено
        iimPlayCode('TAG POS=1 TYPE=TABLE ATTR=TXT:Источник<SP>Адрес<SP>Кадастровый<SP>номер<SP>Условный<SP>ном* EXTRACT=TXT \n SAVEAS TYPE=EXTRACT  FOLDER="C:\\111\\" FILE="kadastr.csv"');
    }else{
        //если не найдено
   break;
   }
   }

   }


Вернуться в «ГИС ЖКХ. Форум разработчиков программного обеспечения и всего, что с ним связано»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: Yandex [Bot] и 2 гостей