Package: cianparser
Сбор данных с сайта объявлений об аренде и продаже недвижимости ЦианCianparser - это библиотека Python 3 (версии 3.8 и выше) для парсинга сайтаЦиан.
С его помощью можно получить достаточно подробные и структурированные данные по краткосрочной и долгосрочной аренде, продаже квартир, домов, танхаусов итд.УстановкаpipinstallcianparserИспользованиеimportcianparsermoscow_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- необходимо ли сохранение собираемых данных (в реальном времени в процессе сбора данных) или нет, по умолчаниюFalsewith_extra_data- необходимо ли сбор дополнительных данных, но с кратным продолжительности по времени (см. ниже вПримечании), по умолчаниюFalseadditional_settings- дополнительные настройки поиска (см. ниже вДополнительные настройки поиска), по умолчаниюNoneПример:importcianparsermoscow_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- необходимо ли сохранение собираемых данных (в реальном времени в процессе сбора данных) или нет, по умолчаниюFalsewith_extra_data- необходимо ли сбор дополнительных данных, но с кратным продолжительности по времени, по умолчаниюFalseadditional_settings- дополнительные настройки поиска (см. ниже вДополнительные настройки поиска), по умолчаниюNoneПример:importcianparsermoscow_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Пример:importcianparsermoscow_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_type1- киричный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.csvauthorauthor_typeurllocationdeal_typeaccommodation_typefloorfloors_countrooms_counttotal_metersprice_per_m2priceyear_of_constructionobject_typehouse_material_typeheating_typefinish_typeliving_meterskitchen_metersphonedistrictstreethouse_numberundergroundresidential_complexWhite 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.csvauthorauthor_typeurllocationdeal_typeaccommodation_typepriceyear_of_constructionhouse_material_typeland_plotland_plot_statusheating_typegas_typewater_supply_typesewage_systembathroomliving_metersfloors_countphonedistrictundergroundstreethouse_numberNew Moscow Housereal_estate_agenthttps://www.cian.ru/sale/suburban/296304861/Москваsalesuburban930000002020Кирпичный13 сот.-1-1ЕстьЕстьЕстьВ доме-12+79096865868Первомайское поселениеулица Центральная21LaRichessereal_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.csvnamelocationaccommodation_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 DevelopmentCloudflare, 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либопустая строкадля числового и строкового типа поля соответственно.Для отсутствия блокировки поIPв данном проекте задана пауза (в размере 4-5 секунд) после сбора информации с
каждой отдельной взятой страницы.Не рекомендутся производить несколько процессов сбора данных параллельно (одновременно) на одной машине (см. пункт 2).Имеется флагwith_extra_data, при помощи которого можно дополнительно собирать некоторые данные, но при этом существенно (в 5-10 раз) замедляется процесс по времени, из-за необходимости заходить на каждую страницу с предложением.
Соответствующие данные:площадь кухни, год постройки здания, тип дома, тип отделки, тип отопления, тип жильяиномер телефона.Данный парсер не будет работать в таком инструменте какGoogle Colaboratory.
См.подробностиЕсли в проекте не имеется подходящего локации (неожидаемое значение аргументаlocation) или иными словами его нет в спискеcianparser.list_locations(), то прошу сообщить, буду рад добавить.