Parser information from Cian website
Project description
Сбор данных с сайта объявлений об аренде и продаже недвижимости Циан
Cianparser - это библиотека Python 3 (версии 3.8 и выше) для парсинга сайта Циан. С его помощью можно получить достаточно подробные и структурированные данные по краткосрочной и долгосрочной аренде, продаже квартир, домов, танхаусов итд.
Установка
pip install cianparser
Использование
import cianparser
data = cianparser.parse(
deal_type="rent_long",
accommodation_type="flat",
location="Москва",
rooms=(2, 3),
start_page=1,
end_page=2,
is_saving_csv=True,
is_latin=False,
is_express_mode=True,
is_by_homeowner=False,
)
print(data[0])
Preparing to collect information from pages..
The absolute path to the file:
/Users/macbook/some_project/cian_parsing_result_rent_long_1_2_moskva_04_Feb_2023_06_58_21_765479.csv
The page from which the collection of information begins:
https://cian.ru/cat.php?engine_version=2&p=1®ion=1&offer_type=flat&deal_type=rent&room2=1&room3=1&with_neighbors=0&type=4
Collecting information from pages with list of announcements
1 | 1 page with list: [=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>] 100% | Count of parsed: 28. Progress ratio 50 %. Average price: 204 642 rub
2 | 2 page with list: [=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>=>] 100% | Count of parsed: 56. Progress ratio 100 %. Average price: 236 426 rub
{ 'accommodation_type': 'flat',
'deal_type': 'rent',
'city': 'Москва',
'district': 'Замоскворечье',
'underground': 'Новокузнецкая',
'street': 'Космодамианская набережная',
'house_number': 25,
'floor': 5,
'floors_count': 12,
'total_meters': 85.0,
'living_meters': 55.0,
'kitchen_meters': 11.0,
'rooms_count': 3,
'year_of_construction': '1954',
'price_per_month': 93000,
'price_per_m2': 1094,
'commissions': 50,
'author': 'Apple Real Estate',
'author_type': 'real_estate_agent',
'phone': '+79057145354',
'link': 'https://www.cian.ru/rent/flat/282487326/',
}
The collection of information from the pages with list of announcements is completed
Total number of parced announcements: 56. Average price per month: 236 426 rub
Конфигурация
Функция parse имеет следующий аргументы:
- deal_type - тип объявления, к примеру, долгосрочная, краткосрочная аренда, продажа ("rent_long", "rent_short", "sale")
- accommodation_type - вид жилья, к примеру, квартира, комната, дом, часть дома, таунхаус ("flat", "room", "house", "house-part", "townhouse")
- location - локация объявления, к примеру, Казань (для просмотра доступных мест используйте cianparser.list_cities())
- rooms - количество комнат, к примеру, 1, (1,3, "studio"), "studio, "all"; по умолчанию любое ("all")
- start_page - страница, с которого начинается сбор данных, по умолчанию, 1
- end_page - страница, с которого заканчивается сбор данных, по умолчанию, 100
- is_saving_csv - необходимо ли сохранение собираемых данных (в реальном времени в процессе сбора данных) или нет, по умолчанию False
- is_latin - необходимо ли преобразывание любой встрещающейся кириллицы в латиницу, по умолчанию False
- is_express_mode - необходимо ли ускорение (в 5-10 раз) сбор данных (но без трех полей, см примечание), по умолчанию True
- is_by_homeowner - необходимо ли собирать данные с объявлений, созданных только собственниками, по умолчанию False
- proxies - прокси (см раздел Cloudflare, CloudScraper, Proxy), по умолчанию None
Если имеется желание собрать данные со всех страниц, то можно пропустить аргументы start_page и end_page. В проекте предусмотрен функционал корректного завершения в случае окончания страниц. По данному моменту, следует изучить раздел Ограничения
В настоящее время функционал доступен только по продажам (sale) и долгосрочном арендам (rent_long) квартир и студий (flat).
Признаки, получаемые в ходе сбора данных с предложений по долгосрочной аренде недвижимости
- district - район
- underground - метро
- street - улица
- house_number - номер дома
- floor - этаж
- floors_count - общее количество этажей
- total_meters - общая площадь
- living_meters - жилая площади
- kitchen_meters - площадь кухни
- rooms_count - количество комнат
- year_construction - год постройки здания
- price_per_month - стоимость в месяц
- price_per_m2 - стоимость на квадратный метр
- commissions - комиссия, взымаемая при заселении
- author - автор объявления
- author_type - тип автора
- phone - номер телефона в объявлении
- link - ссылка на объявление
Возможные значения поля author_type:
- real_estate_agent - агентство недвижимости
- homeowner - собственник
- realtor - риелтор
- official_representative - ук оф.представитель
- representative_developer - представитель застройщика
- developer - застройщик
- unknown - без указанного типа
Признаки, получаемые в ходе сбора данных с предложений по продаже недвижимости
Признаки аналогичны вышеописанным, кроме отсутствия полей price_per_month и commissions.
При этом появляются новые:
- price - стоимость недвижимости
- residential_complex - название жилого комплекса
Сохранение данных
Имеется возможность сохранения собираемых данных в режиме реального времени. Для этого необходимо подставить в аргументе is_saving_csv значение True.
Пример получаемого файла:
cian_parsing_result_rent_long_1_2_moskva_04_Feb_2023_06_58_21_765479.csv
author | author_type | link | city | deal_type | accommodation_type | floor | floors_count | rooms_count | total_meters | price_per_month | price_per_m2 | commissions | year_of_construction | living_meters | kitchen_meters | phone | district | street | underground |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Intermark Real Estate | real_estate_agent | https://www.cian.ru/rent/flat/278903117/ | Москва | rent | flat | 4 | 6 | 3 | 50.0 | 180000 | 3600 | 0 | 1911 | 32.0 | 8.0 | +79676513428 | Пресненский | Малый Предтеченский переулок | Краснопресненская |
Capital Mars | real_estate_agent | https://www.cian.ru/rent/flat/282506328/ | Москва | rent | flat | 5 | 9 | 2 | 89.0 | 180000 | 2022 | 0 | 2006 | 53.0 | 15.0 | +79660619653 | Хамовники | 3-я Фрунзенская | Спортивная |
MERSI | real_estate_agent | https://www.cian.ru/rent/flat/281562376/ | Москва | rent | flat | 8 | 16 | 2 | 80.0 | 200000 | 2500 | 0 | 2012 | -1 | -1 | +79652455850 | Замоскворечье | Мытная | Октябрьская |
Cloudflare, CloudScraper, Proxy
Для обхода блокировки в проекте задействован CloudScraper (библиотека cloudscraper), который позволяет успешно обходить защиту Cloudflare.
Вместе с тем, это не гарантирует отсутствие возможности появления у некоторых пользователей теста CAPTCHA при долговременном непрерывном использовании.
Proxy
Поэтому была предоставлена возможность проставлять прокси, используя аргумент proxies (список прокси протокола HTTP)
Пример:
proxies = [
'85.26.146.169:80',
'178.140.177.145:8889',
'95.66.138.21:8880',
'93.123.226.23:81',
'46.47.197.210:3128',
'213.184.153.66:8080',
'62.33.207.201:3128',
]
В процессе запуска утилита проходится по всем из них, пытаясь определить подходящий, то есть тот, который может, во первых, делать запросы, во вторых, не иметь тест 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).
-
Имеется флаг is_express_mode, при помощи которого можно существенно (в 5-10 раз) ускорить сбор данных благодаря отсутствию необходимости заходить на каждую страницу с предложением. Однако в таком случае не будут собираться данные о площади кухни, годе постройки здания и номере телефона.
-
Данный парсер не будет работать в таком инструменте как Google Colaboratory. См. подробности
-
Если в проекте не имеется подходящего локации (неожидаемое значение аргумента location) или иными словами его нет в списке cianparser.list_cities(). То прошу сообщить, буду рад добавить.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file cianparser-0.4.25.tar.gz
.
File metadata
- Download URL: cianparser-0.4.25.tar.gz
- Upload date:
- Size: 22.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2528e2b6bb1665076d8b7c5007e312afa9d34940bb32889412322deae563bfdb |
|
MD5 | a628a476ac6feeb443b0d06409692498 |
|
BLAKE2b-256 | f9dc4c655e70f32c94e00ee42f0e8f5362d1a9691581e665264cf69bd716466f |
File details
Details for the file cianparser-0.4.25-py3-none-any.whl
.
File metadata
- Download URL: cianparser-0.4.25-py3-none-any.whl
- Upload date:
- Size: 19.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b136662d0de2ef0edb3952001f57bda57e1c84008f57a145182a55b67e7d1c37 |
|
MD5 | 495fb001b0604c13fe6215c90a115f0a |
|
BLAKE2b-256 | 465c1d5cccec5dc18382f9dbf66e17cee3190744c0311e30395389553a4c3c46 |