Есть несколько моментов:
1. Про длинный кусок кода: он и не будет работать так, как вы хотите, потому что вы передаёте аргумент
with_extra_data=True
в свою самописную функцию, а в
parser.get_flats()
- нет. Соответственно он и не парсит дополнительные поля, отсюда и: "пробовала вывести ключи: смотрю, а их там тупо нет".
Должно быть:
data = parser.get_flats(deal_type=deal_type, rooms=rooms, with_extra_data=True, additional_settings={"start_page": page, "end_page": page})
2. Если вы действительно использовали эти прокси (а не просто привели их для примера), то это бессмысленно - они нерабочие. Прокси из свободного доступа редко долго живут, а тут они вообще из примера на pypi.org / github.
3. Вёрстка сайтов постоянно изменяется, в том числе и для противодействия парсингу. Текущая версия циана не имеет
<span>
c текстом "Тип жилья", а именно такой селектор использовался в библиотеке парсера, следовательно он всегда будет отдавать
-1
для object_type.
4. Если вы всё-таки хотите парсить сайт, используя cianparser, то вам нужно внести несколько изменений в файл библиотеки: "Путь до вашего проекта\venv\Lib\site-packages\cianparser\flat\page.py".
В функцию
__parse_flat_offer_page_json__(self)
после инициализации словаря
page_data
, добавить:
ot = self.offer_page_soup.select_one('[data-name="OfferSummaryInfoItem"] p:nth-of-type(2)').get_text()
page_data["object_type"] = ot
и закомментировать строчки:
# if "Тип жилья" == span.text:
# page_data["object_type"] = spans[index + 1].text
Результат: