Атрибут всегда Нет

Я пытался создать веб-скрапер, который собирает имя, цену и район объекта на веб-сайте, но ничего не может с этим поделать, потому что выдает ошибку:

AttributeError: объект «NoneType» не имеет атрибута «полоса».

Что я делаю? Помощь! Также как мне перейти ко второму div? Когда я делаю districtcontainers = souped.find_all("div",{"class":"announcement-block-link"), а затем districtcontainers[0].div.div, он дает 0 выходных данных. Как это решить? Большое спасибо за внимание и ответы :).

import urllib.request as uReq
from bs4 import BeautifulSoup as soup


url = uReq.urlopen("https://www.bazaraki.com/real-estate/houses-and-villas-rent/larnaka-district-larnaca/")
html = url.read()
souped = soup(html,"html.parser")
containers = souped.find_all("div",{"class":"announcement-block-text-container"})
districtcontainers = souped.find_all("div",{"class":"announcement-block__location"})
for container in containers:
    for districtcontainer in districtcontainers:
        title = container.a
        price = container.p
        district = districtcontainer
        print("{}:\n Costs: \n District:{}".format(title.string.strip(),price.string.strip(),district.string.strip()))

person Maxim Zharkov    schedule 24.07.2017    source источник
comment
Попробуйте title.text или title.content?   -  person cs95    schedule 24.07.2017
comment
пробую, пишет ошибка EOF   -  person Maxim Zharkov    schedule 24.07.2017
comment
Это работает, но возвращает каждый элемент сто раз   -  person Maxim Zharkov    schedule 24.07.2017
comment
Что ты имеешь в виду?   -  person cs95    schedule 24.07.2017
comment
Вы действительно используете суп.find_all()? Вместо этого вы должны использовать soap.findAll()   -  person sprksh    schedule 24.07.2017
comment
Он повторяет одно и то же миллион раз. например Вилла в аренду напечатана сто раз   -  person Maxim Zharkov    schedule 24.07.2017


Ответы (1)


Во-первых, ваш последний оператор печати имеет только два {}, но у вас есть три переменные в следующем вызове формата, это просто опечатка, поэтому она не является причиной проблемы.

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

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

Что касается перехода ко второму div на странице, вы можете проверить вызов метода next_sibling.

person Vorboto    schedule 24.07.2017
comment
Не могли бы вы помочь мне с .div.div? .next_sibling возвращает \n. Я не могу разобрать ни одну страницу из-за этого - person Maxim Zharkov; 24.07.2017
comment
Вы можете использовать несколько next_sibling в одном экземпляре, поэтому может потребоваться несколько next_sibling, чтобы добраться до фактического текста или следующего экземпляра элемента HTML. Я предлагаю next_sibling и, возможно, next_element, потому что они гарантируют, что значение возвращается вместо того, чтобы создавать другую ошибку Nonetype, которую вы получаете. - person Vorboto; 24.07.2017