Хочу познакомить читателя с таким ресурсом, как «Единый федеральный реестр сведений о фактах деятельности юридических лиц» (fedresurs.ru), рассказать о его применимости и показать возможность прошерстить ресурс не руками по большому количеству клиентов, а с использованием C# (в вашем случае можете использовать любой другой язык, который вам нравится, подходы, думаю, не изменятся) и море проксей, ну, разумеется, будем парсить. Возможно, тем кто этим займется, пригодятся статья, идеи или, чем черт не шутит, куски кода, а тем, кто просто проводит проверку контрагентов, сможет дать понять, что можно взять с сайта либо придумает, что можно еще проверить.
Периодически возникает потребность в получении данных для анализа клиентов/заемщиков/контрагентов и эти данные мы можем получить с этого сайта. Что же нам предлагается?!
Возникновение обременений (залог, лизинг и т.д.) – посмотреть, например, на возможность заключения фиктивных договоров лизинга или на уже заложенное имущество и т.д.
Различные сообщения по клиенту, например, сообщения о банкротстве и уже с ними – проверка, все ли сообщает клиент и может пора пошевелиться в сторону него и предпринять какие-либо меры.
Торги и т.д.
Составляем запрос для получения желаемого:
Определяем по длине строки, с кем имеем дело – с физическим или юридическим лицом (10 символов – юрик, 12 символов – физик) от этого зависит запрос. Бывает, что 0 впереди ИНН куда-то теряется, так что можем поставить проверку, что если 9 или 11 символов, то дописываем 0 впереди. В худшем случае добудем избыточную информацию.
Стоит обратить внимание на Referer – без него сервер будет отпинывать, сообщая, что страница не найдена.
Берем любой ИНН, например, 3327848813 и делаем запрос. Вернется нам json:
При разложении в таблицу выглядит чуть проще:
И вот мы получили guid и еще чуть-чуть информации сверху.
Дальше можем получить список сообщений по данному клиенту и вот запрос:
Ничего неожиданного, все так же надо определять юр или физ лицо мы смотрим, подставлять guid, limit-количество сколько выведет сообщений, offset-сколько пропустить сообщений, все так же необходимо указывать Referer.
Делаем запрос и получаем :
Часть данных обрезал, чтоб сильно не захламлять текст. И по традиции табличный вид
А теперь перейду к нюансу, куда же без них, иначе было бы неинтересно. По какой-то причине сайт готов выдавать только первые 500 сообщений, не более. Чтобы обойти эту данность, можно начать ставить фильтры либо на типы сообщений, либо на промежуток времени, по которому смотрим, либо и то, и другое. Все это записывается в запрос.
После составления запроса добавляется:
А после части, где получаем ответ от сайта:
После получения ответа смотрим, сколько всего сообщений есть и если их больше 500, то начинаем добавлять к запросу фильтр по датам. Если в ответе все равно много, то снова уменьшаем период времени и так пока не станет <= 500.
Теперь, если просто информации, что за сообщение, нам недостаточно, и мы хотим (аналитик хочет, а мы вынуждены) получить больше информации, то как и прежде берем guid, только на этот раз это guid сообщения и таким же образом строим запрос:
Не стану повторяться, но тут есть момент, а именно, что запрос формируется исходя из типа сообщения. Т.е. sfactmessage (существенные факты) в запросе и в Referer соответственно может принять значения, например, bankruptmessage или какой-либо другое, и под это все json и соответственно конечные таблицы становятся разными.
Осталась рассказать про одну неприятную, но вполне ожидаемую вещь: блокировки по ip((((. За одну айпишку можно успеть сделать от 100 запросов, на некоторых проксях дает сделать лишь один и под замену, и ip улетает в блок примерно на час. Для этой части написал класс подстановки проксей.
В класс собираются списки проксей, и в коде при запросе идет обращение к данному классу, для получения актуальной прокси, в принципе вся работа этого куска описана в комментах. Основная проблема — найти большое количество нормальных проксей, или чтобы хотя бы половина из них были работающие.
Прикладываю также и ссылку на Git, там можно посмотреть больше кода.