Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 5, 2021 18:34:25

mutbka63
Зарегистрирован: 2021-12-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с одинаковым классом

Добрый день. Хочу спарсить эти данные раздельно, но не могу т.к. они все имеют один и тот же класс. Т.к. они имеют при этом разные href, я могу просто прописать в питоне как дополнительное условие этот href, чтобы разделить. Если да, то будьте любезны)) что нужно дописать в строчку кода например
‘metro’: item.find('a', class_='_93444fe79c–link–3ruIo').get_text()
,или если этого недостаточно, то подскажите пожалуйста как это правильно сделать.

Прикреплённый файлы:
attachment Screenshot_1.png (103,9 KБ)

Офлайн

#2 Дек. 5, 2021 18:39:36

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

Парсинг с одинаковым классом

mutbka63
,или если этого недостаточно, то подскажите пожалуйста как это правильно сделать.
дай ссылку и какие данные нужно достать(не в html а на реальной странице)

Офлайн

#3 Дек. 5, 2021 18:49:28

mutbka63
Зарегистрирован: 2021-12-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с одинаковым классом

https://www.cian.ru/snyat-2-komnatnuyu-kvartiru/

Название (например: С видом на кремль)
Характеристики( например: 2-комн. апартаменты, 116,4 м²) - данный пункт тоже не смог отделить ((((
Метро( н.: Охотный ряд)
Округ(н.: ЦАО)
Район(н.: Тверской)
Улица(н.: Охотный ряд)
Дом(н.: 2)
Цена
Ссылка

Офлайн

#4 Дек. 5, 2021 20:14:52

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

Парсинг с одинаковым классом

 import requests
from bs4 import BeautifulSoup
resp = requests.get(r'https://www.cian.ru/snyat-2-komnatnuyu-kvartiru/')
html = resp.text
soup = BeautifulSoup(html, 'lxml')
block = soup.find('div', {'data-name': 'LinkArea'})
link = block.find('a')['href']
name = block.find('span',{'data-mark': 'OfferTitle'}).text
characteristic = block.find('span',{'data-mark': 'OfferSubtitle'}).text
address = list(i.text for i in block.find_all('a', {'data-name': 'GeoLabel'}))
price = block.find('span',{'data-mark': 'MainPrice'}).text
print(name)
print(characteristic)
print(address)
print(price)
print(link)

вывод
 С видом на Кремль
2-комн. апарт., 116,4 м², 7/12 этаж
['Москва', 'ЦАО', 'р-н Тверской', 'м. Охотный ряд', 'улица Охотный Ряд', '2']
1 750 000 ₽/мес.
https://www.cian.ru/rent/flat/262482762/
Process finished with exit code 0

Офлайн

#5 Дек. 5, 2021 20:20:11

mutbka63
Зарегистрирован: 2021-12-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с одинаковым классом

Спасибо, большущее

Офлайн

#6 Дек. 5, 2021 20:43:38

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

Парсинг с одинаковым классом

это по всем на странице

 import requests
from bs4 import BeautifulSoup
resp = requests.get(r'https://www.cian.ru/snyat-2-komnatnuyu-kvartiru/')
html = resp.text
soup = BeautifulSoup(html, 'lxml')
#
blocks = soup.find_all('div', {'data-name': 'LinkArea'})
#
def get_data_from_block(block):
    name, characteristic, address, price, link = [None]*5
    link = block.find('a')['href']
    if block.find('span',{'data-mark': 'OfferTitle'}):
        name = block.find('span',{'data-mark': 'OfferTitle'}).text
    if block.find('span',{'data-mark': 'OfferSubtitle'}):
        characteristic = block.find('span',{'data-mark': 'OfferSubtitle'}).text
    address = list(i.text for i in block.find_all('a', {'data-name': 'GeoLabel'}))
    price = block.find('span',{'data-mark': 'MainPrice'}).text
    return name,characteristic,address,price,link
#
for b in blocks:
    print(get_data_from_block(b))

Отредактировано xam1816 (Дек. 5, 2021 20:45:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version