Задать вопрос
@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&e..."

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
name = data.find('h1').text
^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'find'

Process finished with exit code 1


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

Если проверить ссылки, то он может также запнуться тоже где угодно
spoiler

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

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

Скорее всего, элемент с таким class-ом не всегда есть на странице(меняется class)
Ответ написан
Комментировать
@Demon365 Автор вопроса
Я сделал по другому, пасил через ссылки
spoiler
import requests
import pandas as pd
from bs4 import BeautifulSoup
from time import sleep

# Ссылки что нужно отработать ложить в файл url.txt
with open('url.txt') as f:
li = [line.strip() for line in f]

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

for url in li:
response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, "lxml") # html.parser
data = soup.find("div", class_="a10a3f92e9--page--OYngf")
name = data.find("h1").text
zhk = data.find("a", class_="a10a3f92e9--link--A5SdC").text
address = data.find("div", class_="a10a3f92e9--address-line--GRDTb").text
print(name+'\n'+zhk+'\n'+address+'\n\n')

Оставил пять ссылок, запустил и он отпарсил все удачно, перезапустил еще два раз и удачно, на четвертый раз отпарсил только первую ссылку и выдал ошибку, на пятый раз вообще не отпарсил, на шестой три
spoiler
Продается 2-комн. квартира, 56,3 м²
ЖК «Борисенко 48»
Приморский край, Владивосток, р-н Первомайский, мкр. Борисенко, Борисенко 48 жилой комплексНа карте

Продается 1-комн. квартира, 33,26 м²
ЖК «Снежный парк»
Приморский край, Владивосток, р-н Первореченский, мкр. Снеговая падь, Снежный парк жилой комплекс, 1На карте

Продается 2-комн. квартира, 61,2 м²
ЖК «Босфорский парк»
Приморский край, Владивосток, р-н Первомайский, мкр. Патрокл, Босфорский Парк жилой комплекс, 4На карте

Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in
start(fakepyfile,mainpyfile)
File "/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File "", line 19, in
AttributeError: 'NoneType' object has no attribute 'find'

[Program finished]


Что интересно если по такому методу парсить главную страницу, то там отрабатывает, а когда путем открытия каждой ссылки, то рандомном отрабатывает
Ответ написан
Ваш ответ на вопрос

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

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