Задать вопрос
@Demon365

В чем ошибка при парсинге на python?

При парсинге объявлений выходит ошибка о ненайденном атрибуте find.
spoiler
import requests
import pandas as pd
from bs4 import BeautifulSoup
from time import sleep

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"}

def get_url():
    for i in range(0, 1):
        sleep(5)
        url = f"https://habarovsk.cian.ru/cat.php?deal_type=sale&engine_version=2&from_developer=1&object_type%5B0%5D=2&offer_type=flat&only_flat=1&p={i}&region=5039&year%5B0%5D=2025&year%5B1%5D=2026&year%5B2%5D=2027&year%5B3%5D=2028&yeargte=2029"

        response = requests.get(url, headers=headers)

        soup = BeautifulSoup(response.text, "lxml")  # html.parser

        data = soup.find_all("div", class_="_93444fe79c--container--kZeLu _93444fe79c--link--DqDOy")

        for i in data:
            card_url = i.find("a").get("href")
            yield card_url


for card_url in get_url():
    response = requests.get(card_url, headers=headers)
    soup = BeautifulSoup(response.text, "lxml")
    data = soup.find("div", class_="a10a3f92e9--page--OYngf")
    name = data.find('h1').text
    print(name)


сама ошибка
spoiler
C:\Users\Денис\PycharmProjects\PythonProject3\.venv\Scripts\python.exe C:\Users\Денис\PycharmProjects\PythonProject3\parser.py 
Продается 3-комн. квартира, 74,6 м²
Traceback (most recent call last):
  File "C:\Users\Денис\PycharmProjects\PythonProject3\parser.py", line 28, in <module>
    name = data.find('h1').text
           ^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'find'

Process finished with exit code 1


Что интересно он например сейчас отпарсил один заголовок одного объявления, а иногда может больше, а иногда сразу выдает ошибку.
По коду он сначала находит все ссылки на странице, а потом идет по ссылкам и тянет данные из каждого объявления.

Если проверить ссылки, то он может также запнуться тоже где угодно
spoiler
C:\Users\Денис\PycharmProjects\PythonProject3\.venv\Scripts\python.exe C:\Users\Денис\PycharmProjects\PythonProject3\parser.py 
https://habarovsk.cian.ru/sale/flat/301393558/
https://habarovsk.cian.ru/sale/flat/307252257/
https://habarovsk.cian.ru/sale/flat/302210025/
https://habarovsk.cian.ru/sale/flat/306976675/
https://habarovsk.cian.ru/sale/flat/309973282/
https://habarovsk.cian.ru/sale/flat/314584143/
https://habarovsk.cian.ru/sale/flat/310806759/
https://habarovsk.cian.ru/sale/flat/314005085/
https://habarovsk.cian.ru/sale/flat/313554189/
https://habarovsk.cian.ru/sale/flat/306921407/
https://habarovsk.cian.ru/sale/flat/309962786/
https://habarovsk.cian.ru/sale/flat/296300456/
https://habarovsk.cian.ru/sale/flat/314080012/
Traceback (most recent call last):
  File "C:\Users\Денис\PycharmProjects\PythonProject3\parser.py", line 29, in <module>
    name = data.find('h1').text
           ^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'find'

Process finished with exit code 1

Хотя все заголовки по всем проверенным ссылкам в коде есть
  • Вопрос задан
  • 264 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Что интересно он например сейчас отпарсил один заголовок одного объявления, а иногда может больше, а иногда сразу выдает ошибку.

В таких случаях в обработчике ошибок надо логировать контент, который отдал сайт. Очень вероятно, что там нет тега h1, а есть только текст "Обнаружен парсинг, доступ заблокирован" или что-то подобное.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Попробуйте проверять data после этой строки
data = soup.find("div", class_="a10a3f92e9--page--OYngf")

Скорее всего, элемент с таким class-ом не всегда есть на странице(меняется class)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы