Andrew 76868
Andrew 76868

Reputation: 414

Getting an empty list while parsing HTML

I've recently faced a problem with parsing the website. I need to get the piece of text from this HTML:

<span content="Москва, СВАО, р-н Ярославский, м. Ростокино, улица Проходчиков, 8" itemprop="name"></span>

I wanted to get text after <span content=...>.

for a in self.find_all("span", {"itemprop": "name"}):
    a = a.text.split(',')
    print(a[2])

But I get an empty list.

Upvotes: 0

Views: 145

Answers (3)

KunduK
KunduK

Reputation: 33384

If you are looking after content value.use CSS selector and content attribute.

from bs4 import BeautifulSoup
import requests
response=requests.get("https://www.cian.ru/kupit-1-komnatnuyu-kvartiru/")
soup=BeautifulSoup(response.text,"html.parser")
for item in soup.select('span[itemprop="name"][content]'):
    print(item['content'])

Output:

Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, Люберецкие Поля мкр, 13-й кв-л, к16
Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, улица Лавриненко, 5
Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, Люберецкие Поля мкр, 12-й кв-л, Квартал Некрасовка ЖК, к9
Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, улица Маресьева
Москва, ЗАО, р-н Раменки, м. Мичуринский проспект, улица Лобачевского, 118к2
Москва, ЗАО, р-н Филевский парк, м. Шелепиха, Береговой ЖК, к1
Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, Люберецкие Поля мкр, 13-й кв-л, к16
Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, Люберецкие Поля мкр, 13-й кв-л, к16
Москва, ЗАО, р-н Филевский парк, м. Фили, Багратионовский проезд
Москва, ЗАО, р-н Раменки, м. Раменки, Мичуринский проспект
Москва, ЗАО, р-н Раменки, м. Мичуринский проспект, улица Лобачевского, 120
Москва, ЗАО, р-н Раменки, м. Раменки, улица Лобачевского, 118к1
Москва, ЗАО, р-н Крылатское, м. Крылатское, Рублевское шоссе, 70к2
Москва, ЗАО, р-н Крылатское, м. Крылатское, Рублевское шоссе, 70к6
Москва, ЗАО, р-н Раменки, м. Раменки, улица Лобачевского, 118к2
Москва, ЗАО, р-н Раменки, м. Аминьевское шоссе, улица Лобачевского, 114
Москва, ЗАО, р-н Филевский парк, м. Фили, Багратионовский проезд
Москва, ЮВАО, р-н Некрасовка, улица Вертолетчиков, 13
Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, улица Вертолетчиков, 13
Москва, ЦАО, р-н Басманный, м. Электрозаводская, улица Госпитальный Вал, 5С7
Москва, ЗАО, р-н Раменки, м. Раменки, Мичуринский проспект
Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, Люберецкие Поля мкр, 12-й кв-л, Квартал Некрасовка ЖК, к9
Москва, ЗАО, р-н Раменки, м. Мичуринский проспект, улица Лобачевского, 120
Москва, ЗАО, р-н Филевский парк, м. Фили, Багратионовский проезд
Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, улица Лавриненко, 5
Москва, ЮВАО, р-н Некрасовка, м. Некрасовка, улица Лавриненко, 5
Москва, ЗАО, р-н Филевский парк, м. Шелепиха, Береговой ЖК, к1
Москва, СЗАО, р-н Хорошево-Мневники, м. Хорошево, 3-я Хорошевская улица, 19А

Upvotes: 2

Arn
Arn

Reputation: 2015

You need to retrieve content from span in the following manner:

import requests
from bs4 import BeautifulSoup
URL = 'https://www.cian.ru/kupit-1-komnatnuyu-kvartiru/'
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html5lib')
found_class_with_content = 'c6e8ba5398--address-links--1tfGW'
divs = soup.find_all('div', class_=found_class_with_content)
for div in divs:
    content = div.find('span', {"itemprop": "name"})['content']
    print(content)

Upvotes: 1

Maryam
Maryam

Reputation: 720

maybe this peace of code help you:

a.contents[0]

or

a.content

Upvotes: 0

Related Questions