Ответы пользователя по тегу Парсинг
  • Почему парсер не собирает данные и записывает пустые значения?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Есть несколько моментов:
    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


    Результат:
    671dbfa43dc32277607933.png
    Ответ написан
    3 комментария
  • Python парсинг, скрипт перестал вытягивать информацию, как исправить?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Такой вариант не подойдёт? Рендерится через Chromium.

    from requests_html import HTMLSession
    
    def download(url):
        session = HTMLSession()
        resp = session.get(url)
        resp.html.render()
    
        if resp.status_code == 200:
            list_of_img = resp.html.find('img')
            d = list_of_img[0].attrs
            image_url = d['srcset'].split(',')[-1].split(' ')[0]
            image_name = image_url.split('/')[-1]
            image = session.get(image_url).content
            with open(image_name, 'wb') as file:
                file.write(image)
        else:
            print(f"[ERROR] Не удалось загрузить изображение:\n{url}")
    
        session.close()
    
    download('https://scrolller.com/i-dragged-my-brother-out-at-1am-to-see-the-aogsmn8ihx')
    Ответ написан
    Комментировать