New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

cianparser

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cianparser

Parser information from Cian website

  • 1.0.4
  • PyPI
  • Socket score

Maintainers
1

Сбор данных с сайта объявлений об аренде и продаже недвижимости Циан

Cianparser - это библиотека Python 3 (версии 3.8 и выше) для парсинга сайта Циан. С его помощью можно получить достаточно подробные и структурированные данные по краткосрочной и долгосрочной аренде, продаже квартир, домов, танхаусов итд.

Установка

pip install cianparser

Использование

import cianparser

moscow_parser = cianparser.CianParser(location="Москва")
data = moscow_parser.get_flats(deal_type="sale", rooms=(1, 2), with_saving_csv=True, additional_settings={"start_page":1, "end_page":2})

print(data[0])
                              Preparing to collect information from pages..
The absolute path to the file: 
 /Users/macbook/some_project/cianparser/cian_flat_sale_1_2_moskva_12_Jan_2024_21_48_43_100892.csv 

The page from which the collection of information begins: 
 https://cian.ru/cat.php?engine_version=2&p=1&with_neighbors=0&region=1&deal_type=sale&offer_type=flat&room1=1&room2=1

Collecting information from pages with list of offers
 1 | 1 page with list: [=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>] 100% | Count of all parsed: 28. Progress ratio: 50 %. Average price: 45 547 801 rub
 2 | 2 page with list: [=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>] 100% | Count of all parsed: 56. Progress ratio: 100 %. Average price: 54 040 102 rub

The collection of information from the pages with list of offers is completed
Total number of parsed offers: 56.
{
    "author": "MR Group",
    "author_type": "developer",
    "url": "https://www.cian.ru/sale/flat/292125772/",
    "location": "Москва",
    "deal_type": "sale",
    "accommodation_type": "flat",
    "floor": 20,
    "floors_count": 37,
    "rooms_count": 1,
    "total_meters": 39.6,
    "price": 28623910,
    "district": "Беговой",
    "street": "Ленинградский проспект",
    "house_number": "вл8",
    "underground": "Белорусская",
    "residential_complex": "Slava"
}

Инициализация

Параметры, используемые при инициализации парсера через функциою CianParser:

  • location - локация объявления, к примеру, Москва (для просмотра доступных мест используйте cianparser.list_locations())
  • proxies - прокси (см раздел Cloudflare, CloudScraper, Proxy), по умолчанию None

Метод get_flats

Данный метод принимает следующий аргументы:

  • deal_type - тип объявления, к примеру, долгосрочная аренда, продажа ("rent_long", "sale")
  • rooms - количество комнат, к примеру, 1, (1,3, "studio"), "studio, "all"; по умолчанию любое ("all")
  • with_saving_csv - необходимо ли сохранение собираемых данных (в реальном времени в процессе сбора данных) или нет, по умолчанию False
  • with_extra_data - необходимо ли сбор дополнительных данных, но с кратным продолжительности по времени (см. ниже в Примечании), по умолчанию False
  • additional_settings - дополнительные настройки поиска (см. ниже в Дополнительные настройки поиска), по умолчанию None

Пример:

import cianparser

moscow_parser = cianparser.CianParser(location="Москва")
data = moscow_parser.get_flats(deal_type="rent_long", rooms=(1, 2), additional_settings={"start_page":1, "end_page":1})

В проекте предусмотрен функционал корректного завершения в случае окончания страниц. По данному моменту, следует изучить раздел Ограничения

Метод get_suburban (сбор объявлений домов/участков/танхаусав итп)

Данный метод принимает следующий аргументы:

  • suburban_type - тип здания, к примеру, дом/дача, часть дома, участок, танхаус ("house", "house-part", "land-plot", "townhouse")
  • deal_type - тип объявления, к примеру, долгосрочная аренда, продажа ("rent_long", "sale")
  • with_saving_csv - необходимо ли сохранение собираемых данных (в реальном времени в процессе сбора данных) или нет, по умолчанию False
  • with_extra_data - необходимо ли сбор дополнительных данных, но с кратным продолжительности по времени, по умолчанию False
  • additional_settings - дополнительные настройки поиска (см. ниже в Дополнительные настройки поиска), по умолчанию None

Пример:

import cianparser

moscow_parser = cianparser.CianParser(location="Москва")
data = moscow_parser.get_suburban(suburban_type="townhouse", deal_type="sale", additional_settings={"start_page":1, "end_page":1})

Метод get_newobjects (сбор даннных по новостройкам)

Данный метод принимает следующий аргументы:

  • with_saving_csv - необходимо ли сохранение собираемых данных (в реальном времени в процессе сбора данных) или нет, по умолчанию False

Пример:

import cianparser

moscow_parser = cianparser.CianParser(location="Москва")
data = moscow_parser.get_newobjects()

Дополнительные настройки поиска

Пример:

additional_settings = {
    "start_page":1,
    "end_page": 10,
    "is_by_homeowner": True,
    "min_price": 1000000,
    "max_price": 10000000,
    "min_balconies": 1,
    "have_loggia": True,
    "min_house_year": 1990,
    "max_house_year": 2023,
    "min_floor": 3,
    "max_floor": 4,
    "min_total_floor": 5,
    "max_total_floor": 10,
    "house_material_type": 1,
    "metro": "Московский",
    "metro_station": "ВДНХ",
    "metro_foot_minute": 45,
    "flat_share": 2,
    "only_flat": True,
    "only_apartment": True,
    "sort_by": "price_from_min_to_max",
}
  • object_type - тип жилья ("new" - вторичка, "secondary" - новостройка)
  • start_page - страница, с которого начинается сбор данных
  • end_page - страница, с которого заканчивается сбор данных
  • is_by_homeowner - объявления, созданных только собственниками
  • min_price - цена от (в рублях)
  • max_price - цена до (в рублях)
  • min_balconies - минимальное количество балконов
  • have_loggia - наличие лоджи
  • min_house_year - год постройки дома от
  • max_house_year - год постройки дома до
  • min_floor - этаж от
  • max_floor - этаж до
  • min_total_floor - этажей в доме от
  • max_total_floor - этажей в доме до
  • house_material_type - тип дома (см ниже возможные значения)
  • metro - название метрополитена (см ниже возможные значения)
  • metro_station - станция метро (доступно при заданом metro)
  • metro_foot_minute - сколько минут до метро пешком
  • flat_share - с долями или без (1 - только доли, 2 - без долей)
  • only_flat - без апартаментов
  • only_apartment - только апартаменты
  • sort_by - сортировка объявлений (см ниже возможные значения)
Возможные значения поля house_material_type
  • 1 - киричный
  • 2 - монолитный
  • 3 - панельный
  • 4 - блочный
  • 5 - деревянный
  • 6 - сталинский
  • 7 - щитовой
  • 8 - кирпично-монолитный
Возможные значения полей metro и metro_station

Соответствуют ключам и значениям словаря, получаемого вызовом функции cianparser.list_metro_stations()

Возможные значения поля sort_by
  • "price_from_min_to_max" - сортировка по цене (сначала дешевле)
  • "price_from_max_to_min" - сортировка по цене (сначала дороже)
  • "total_meters_from_max_to_min" - сортировка по общей площади (сначала больше)
  • "creation_data_from_newer_to_older" - сортировка по дате добавления (сначала новые)
  • "creation_data_from_older_to_newer" - сортировка по дате добавления (сначала старые)

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

  • district - район
  • underground - метро
  • street - улица
  • house_number - номер дома
  • floor - этаж
  • floors_count - общее количество этажей
  • total_meters - общая площадь
  • living_meters - жилая площади
  • kitchen_meters - площадь кухни
  • rooms_count - количество комнат
  • year_construction - год постройки здания
  • house_material_type - тип дома (киричный/монолитный/панельный итд)
  • heating_type - тип отопления
  • price_per_month - стоимость в месяц
  • commissions - комиссия, взымаемая при заселении
  • author - автор объявления
  • author_type - тип автора
  • phone - номер телефона в объявлении
  • url - ссылка на объявление

Возможные значения поля author_type:

  • real_estate_agent - агентство недвижимости
  • homeowner - собственник
  • realtor - риелтор
  • official_representative - ук оф.представитель
  • representative_developer - представитель застройщика
  • developer - застройщик
  • unknown - без указанного типа

Признаки, получаемые в ходе сбора данных с предложений по продаже недвижимости

Признаки аналогичны вышеописанным, кроме отсутствия полей price_per_month и commissions.

При этом появляются новые:

  • price - стоимость недвижимости
  • residential_complex - название жилого комплекса
  • object_type - тип жилья (вторичка/новостройка)
  • finish_type - отделка

Признаки, получаемые в ходе сбора данных по новостройкам

  • name - наименование ЖК
  • url - ссылка на страницу
  • full_location_address - полный адрес расположения ЖК
  • year_of_construction - год сдачи
  • house_material_type - тип дома (см выше возможные значения)
  • finish_type - отделка
  • ceiling_height - высота потолка
  • class - класс жилья
  • parking_type - тип парковки
  • floors_from - этажность (от)
  • floors_to - этажность (до)
  • builder - застройщик

Сохранение данных

Имеется возможность сохранения собираемых данных в режиме реального времени. Для этого необходимо подставить в аргументе with_saving_csv значение True.

Пример получаемого файла при вызове метода get_flats с with_extra_data = True:
cian_flat_sale_1_1_moskva_12_Jan_2024_22_29_48_117413.csv
authorauthor_typeurllocationdeal_typeaccommodation_typefloorfloors_countrooms_counttotal_metersprice_per_m2priceyear_of_constructionobject_typehouse_material_typeheating_typefinish_typeliving_meterskitchen_metersphonedistrictstreethouse_numberundergroundresidential_complex
White and Broughtonreal_estate_agenthttps://www.cian.ru/sale/flat/290499455/Москваsaleflat340145.5709890323000002021ВторичкаМонолитныйЦентральное-119.06.0+79646331510ХорошевскийЛенинградский проспект37/4ДинамоПрайм Парк
ФСКdeveloperhttps://www.cian.ru/sale/flat/288376323/Москваsaleflat2447246.0528900243294002024НовостройкаМонолитно-кирпичный-1Без отделки, предчистовая, чистовая18.015.0+74951387154ОбручевскийАкадемика Волгина2С1КалужскаяАрхитектор
White and Broughtonreal_estate_agenthttps://www.cian.ru/sale/flat/292416804/Москваsaleflat241260.0783333470000002021Вторичка-1Центральное-143.05.0+79646331510ХорошевскийЛенинградский проспект37/5ДинамоПрайм Парк
Пример получаемого файла при вызове метода get_suburban с with_extra_data = True:
cian_suburban_townhouse_sale_15_15_moskva_13_Jan_2024_04_30_47_963046.csv
authorauthor_typeurllocationdeal_typeaccommodation_typepriceyear_of_constructionhouse_material_typeland_plotland_plot_statusheating_typegas_typewater_supply_typesewage_systembathroomliving_metersfloors_countphonedistrictundergroundstreethouse_number
New Moscow Housereal_estate_agenthttps://www.cian.ru/sale/suburban/296304861/Москваsalesuburban930000002020Кирпичный13 сот.-1-1ЕстьЕстьЕстьВ доме-12+79096865868Первомайское поселениеулица Центральная21
LaRichessereal_estate_agenthttps://www.cian.ru/sale/suburban/290335502/Москваsalesuburban95000000-1Пенобетонный блок12 сот.Индивидуальное жилищное строительствоЦентральное-1-1-1-1502,8 м²2+79652502027Воскресенское поселениеулица Каменка44Ас1
Динара Вагановаrealtorhttps://www.cian.ru/sale/suburban/293424451/Москваsalesuburban21990000-1-1-1Индивидуальное жилищное строительство-1Нет-1Нет-1-1-1+79672093870Первомайское поселением. Крёкшино
Пример получаемого файла при вызове метода get_newobjects:
cian_newobject_13_Jan_2024_01_27_32_734734.csv
namelocationaccommodation_typeurlfull_location_addressyear_of_constructionhouse_material_typefinish_typeceiling_heightclassparking_typefloors_fromfloors_tobuilder
ЖК «SYMPHONY 34 (Симфони 34)»Москваnewobjecthttps://zhk-symphony-34-i.cian.ruМосква, САО, Савеловский, 2-я Хуторская ул., 342025МонолитныйПредчистовая, чистовая3,0 мПремиумПодземная, гостевая3654Застройщик MR Group
ЖК «Коллекция клубных особняков Ильинка 3/8»Москваnewobjecthttps://zhk-kollekciya-klubnyh-osobnyakov-ilinka-38-i.cian.ruМосква, ЦАО, Тверской, ул. Ильинка2024Монолитно-кирпичный, монолитныйБез отделкиот 3,35 м до 6,0 мПремиумПодземная, гостевая35Застройщик Sminex-Интеко
ЖК «Victory Park Residences (Виктори Парк Резиденсез)»Москваnewobjecthttps://zhk-victory-park-residences-i.cian.ruМосква, ЗАО, Дорогомилово, ул. Братьев Фонченко2024МонолитныйЧистоваяПремиумПодземная1011Застройщик ANT Development

Cloudflare, CloudScraper, Proxy

Для обхода блокировки в проекте задействован CloudScraper (библиотека cloudscraper), который позволяет успешно обходить защиту Cloudflare.

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

Proxy

Поэтому была предоставлена возможность проставлять прокси, используя аргумент proxies (список прокси протокола HTTPS)

Пример:

proxies = [
    '117.250.3.58:8080', 
    '115.96.208.124:8080',
    '152.67.0.109:80', 
    '45.87.68.2:15321', 
    '68.178.170.59:80', 
    '20.235.104.105:3729', 
    '195.201.34.206:80',
]

В процессе запуска утилита проходится по всем из них, пытаясь определить подходящий, то есть тот, который может, во первых, делать запросы, во вторых, не иметь тест CAPTCHA

Пример лога, в котором представлено все три возможных кейса

The process of checking the proxies... Search an available one among them...
 1 | proxy 46.47.197.210:3128: unavailable.. trying another
 2 | proxy 213.184.153.66:8080: there is captcha.. trying another
 3 | proxy 95.66.138.21:8880: available.. stop searching

Ограничения

Сайт выдает списки с объявлениями лишь до 54 странцы включительно. Это примерно 28 * 54 = 1512 объявлений. Поэтому, если имеется желание собрать как можно больше данных, то следует использовать более конкретные запросы (по количеству комнат).

К примеру, вместо того, чтобы при использовании указывать rooms=(1, 2), стоит два раза отдельно собирать данные с параметрами rooms=1 и rooms=2 соответственно.

Таким образом, максимальная разница может составить 1 к 6 (студия, 1, 2, 3, 4, 5 комнатные квартиры), то есть 1512 к 9072.

Примечание

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

  2. Для отсутствия блокировки по IP в данном проекте задана пауза (в размере 4-5 секунд) после сбора информации с каждой отдельной взятой страницы.

  3. Не рекомендутся производить несколько процессов сбора данных параллельно (одновременно) на одной машине (см. пункт 2).

  4. Имеется флаг with_extra_data, при помощи которого можно дополнительно собирать некоторые данные, но при этом существенно (в 5-10 раз) замедляется процесс по времени, из-за необходимости заходить на каждую страницу с предложением. Соответствующие данные: площадь кухни, год постройки здания, тип дома, тип отделки, тип отопления, тип жилья и номер телефона.

  5. Данный парсер не будет работать в таком инструменте как Google Colaboratory. См. подробности

  6. Если в проекте не имеется подходящего локации (неожидаемое значение аргумента location) или иными словами его нет в списке cianparser.list_locations(), то прошу сообщить, буду рад добавить.

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc