NTA

Использование парсера для получения информации из открытых источников (проверки информации)

10000 кадастровых номеров, 30000 записей, источник — веб-сайт, дедлайн — конец рабочего дня. Как выгрузить такой объем данных?

В своей работе мы нередко встречаемся с необходимостью получить недостающую/обновить существующую информацию об исследуемом объекте. При условии, что нужная нам информация находится в открытых источниках, мы можем извлечь ее с помощью программы для сканирования веб-страниц (парсера).

Рассмотрим пример парсинга сервиса Росреестра. В связи с большим количеством информации о технологии парсинга в сети интернет, сделаем акцент на практической реализации программного кода.

Итак, нам необходимо получить информацию об адресе и типе объекта недвижимости, но известен только кадастровый номер. Необходимая информация содержится на сервисе rosreestr.NET.

Алгоритм работы.

1) Перейти на сайт

2) Ввести кадастровый номер в поле поиска, нажать Enter;

3) В появившемся ниже поле определить проверяемый объект и нажать кнопку «выбрать»;

4) На странице объекта идентифицировать информацию (в нашем случае это тип, кадастровый номер, и адрес объекта недвижимости);

5) Сохранить результат.

Для реализации инструмента нам необходим Python, библиотеки Selenium, Pandas, а также Google Chrome, ChromeDriver и базовые навыки HTML.

  • Входные данные.

Кадастровые номера объектов находятся в таблице в формате Excel.Импортируем электронную таблицу, получаем список из кадастровых номеров.

import pandas as pd import numpy as np adres=pd.read_excel('kad.xlsx',header=None) llist=adres[]

2. Создадим функции.startChrome — функция запуска браузера.

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.chrome.options import Options from selenium.webdriver.support import expected_conditions as EC def startChrome(): chrome_options = Options() driver = webdriver.Chrome(options=chrome_options) driver.set_page_load_timeout(30) WebDriverWait(driver, 2) return driver

wait_element и wait_element_text — функции обращения к веб-элементам:

  • основаны на явном ожидании (explicit waits) элементов, данная реализация позволяет избежать использования таймера, что ускоряет работу кода;
  • обращаются к элементу через XPath (язык запросов для извлечения элементов в XML документе).
def wait_element (path): try: WebDriverWait(driver, 30).until( EC.presence_of_element_located((By.XPATH, path))) except: driver.refresh() return driver.find_element_by_xpath(path) def wait_element_text (path): try: element = WebDriverWait(driver, 30).until( EC.presence_of_element_located((By.XPATH, path))) except: aaa=np.nan else: aaa=driver.find_element_by_xpath(path).text return aaa

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

Нажать правой кнопкой на интересующий веб-элемент в окне браузера -> «Просмотр кода элемента».

В появившейся справа консоли кликнуть правой кнопкой мыши по выбранному элементу -> выбрать «copy XPath».

Скопированный XPath можно использовать в качестве входного параметра для переменной.

3. Запуск скрипта.Алгоритм приведенного скрипта работает в однопоточном режиме, извлекая информацию о каждом объекте недвижимости по кадастровому номеру, находящегося в исходной таблице kad.xlsx.

#создаем пустые таблицы df=df_temp=pd.DataFrame() #запускаем браузер driver = startChrome() #переходим на веб-страницу ранее упомняутого сервиса driver.get('https://rosreestr.net/proverit-kvartiru') #циклически извлекаем кадастровые номера объектов недвижимости из списка for i in list(range(0,len(llist))): #присваиваем пустые знаечния переменным a0=a1=a2=np.nan #вводим кадастровый номер в поле поиска и нажимаем Enter wait_element('//*[@id="search_main"]').send_keys(str(llist[i]),Keys.RETURN) #используем функцию ожидания до тех пор пока не исчезнет таймер поиска while driver.find_element_by_xpath('//*[@id="table_search_timer"]').is_displayed(): time.sleep(1) else: #если совпадений не найдено, вывести сообщение if driver.find_element_by_xpath('//div[@class="table_search_not-title"]').text \ =='Совпадений не найдено... Что делать?': print('table_search_not') #иначе else: print('table_search') try: #нажать на кнопку выбрать у проверяемого объекта wait_element('//a[contains(@href,"/kadastr/")] \ /div[@class="table__btn"]').click() #задать переменной тип объекта a0=wait_element_text('//div[@class="test__data"] \ /div[contains(text(),"Тип")]/strong') #задать переменной кадастрвый номер объекта a1=wait_element_text('//div[@class="test__data"] \ /div[contains(text(),"Кадастровый номер")]/strong') #задать переменной адрес объекта a2=wait_element_text('//div[@class="test__data"] \ /div[contains(text(),"Адрес полный")]/strong') print(i,a0,a1,a2) except: print('no buton') #создать временную таблицу из набора переменных df_temp=pd.DataFrame([llist[i],a0,a1,a2]).transpose() #добавить временную таблицу в основную таблицу df=df.append(df_temp) #по завершению цикла закрыть браузер driver.close() #сохранит результат в электронную таблицу df.to_excel('result.xlsx', index=None)

Результат в виде наборов параметров (тип, кадастровый номер, и адрес объекта недвижимости) сохраняется в таблицу result.xlsx.

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

{ "author_name": "NTA", "author_type": "editor", "tags": ["\u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438","\u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442","\u0441\u043e\u0437\u0434\u0430\u0442\u044c","\u0441\u043e\u0437\u0434\u0430\u0435\u043c","\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c","\u043f\u043e","\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c","\u043d\u0430\u0436\u0430\u0442\u044c","\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c","\u0438\u043d\u0430\u0447\u0435","\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c","\u0437\u0430\u0434\u0430\u0442\u044c","\u0435\u0441\u043b\u0438","\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c","\u0432\u0432\u043e\u0434\u0438\u043c"], "comments": 0, "likes": 2, "favorites": 5, "is_advertisement": false, "subsite_label": "newtechaudit", "id": 125905, "is_wide": true, "is_ugc": false, "date": "Fri, 08 May 2020 21:00:28 +0300", "is_special": false }
0
0 комментариев
Популярные
По порядку
Читать все 0 комментариев
Как традиционному малому бизнесу превратиться в стартап: план действий

Сейчас в России предприниматели переходят из традиционного малого бизнеса в стартапы очень редко — меньше чем в 0,02% случаев. Это не больше 1 000 стартапов из около 6 млн предприятий малого бизнеса. Поговорим о том, что мешает предпринимателям и как действовать, если есть желание создать стартап.

Заголовок вышел из-под контроля
Что за чудеса происходят с алгоритмами Яндекс.Директ в РСЯ. Почему испортилась РСЯ и как это исправить

Многие рекламодатели Яндекс.Директ начиная с лета 2021-го года заметили странные тенденции в работе нейросети РСЯ. Я в их числе. Что делать, если рекламные кампании резко перестали приносить конверсии и засоряют сайт некачественным трафиком за ваши деньги? Попробуем разобраться и изучить вопрос на конкретных примерах мусорного трафика.

Нужны ли в России сити-фермы

И появятся ли грядки на крышах пятиэтажек.

re-thinkingthefuture.com
Готовы выбрать победителя премии «Экспортер года eBay — 2021»?
Сервис аренды электросамокатов Whoosh добавил электровелосипеды — пока в тестовом режиме Статьи редакции

От 6 рублей за минуту.

Как мы проводили командную ретроспективу в Minecraft

Рассказываем историю, на что стоит обратить внимание при проведении командного мероприятия в игре Minecraft, какие грабли могут быть, как организовать онлайн- и офлайн-участие.

Vavada de Вавада регистрация + вход и официальный сайт

Vavada — онлайн , предлагающее огромный ассортимент азартных развлечений, выгодные бонусы, интересные акции. Гостям Вавада доступны удобные способы пополнения играй Вавада

За 100 лет до МММ: как рязанский банкир построил финансовую пирамиду в 19 веке и обманул вкладчиков на 12 млн рублей Статьи редакции

Когда в скопинском банке оказалось недостаточно денег, чтобы выплачивать проценты по вкладам, директор Иван Рыков «нарисовал» баланс и привлёк новых вкладчиков. На их деньги он отдавал проценты — так и зародилась первая в России финансовая пирамида, которая просуществовала 15 лет.

Здание Скопинского банка Архив Скопинского исторического общества
Чудаки на букву М, МТС продал оплаченный Iphone 13 pro max

Собственно возжелала душа новинку, новый IPhone 13 pro max. Начал искать в гугле и нашел на офф.сайте МТС нужную модель в наличии, под самовывоз с салона, заказал и сразу оплатил.

Раскручивают на анализы и навязывают «абонемент» к врачу: как и почему клиники монетизируют тревожность родителей

Пять популярных схем «развода» в детских клиниках и способы распознать попытку навязать вам ненужные услуги на десятки тысяч рублей.

Это я — Екатерина Очаковская
null