Как правильно вытащить данные между <div> ?

Ivangeo

Новичок
Пользователь
Ноя 15, 2020
3
0
1
Python 3.9
Win10

Всем привет. Начал изучать Питон недавно.

Надо спарсить инфу с сайта.
Написал код:

Код:
import requests
from bs4 import BeautifulSoup
import csv
url = 'https://fortexgroup.ru/bc/plehanova-17-s10/'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0',
           'accept': '*/*'}

req = requests.get(url, headers=headers)
src = req.text

with open("bc2.html", "w", encoding="utf-8") as file:
    file.write(src)

with open("bc2.html", encoding="utf-8") as file:
        src = file.read()

soup = BeautifulSoup(src, "lxml")
blok = soup.find(class_="techInfo").find(class_="toLine").find_all(class_="col-4")
for item in blok:

    print(item)

В итоге выдает так:

<div class="col-4"><h4>Местоположение:</h4><div class="tableInfo"><div><div>округ</div><div></div><div>ВАО</div></div><div><div>район</div><div></div><div>Перово</div></div><div><div>метро</div><div></div><div>Шоссе Энтузиастов</div></div><div><div>от метро</div><div></div><div>17 мин пешком</div></div><div><div>налоговая инспекция</div><div></div><div>№ 20</div></div></div></div>
<div class="col-4"><h4>Технические параметры:</h4><div class="tableInfo" data-name="techTable"><div><div>класс</div><div></div><div>B</div></div><div><div>этажность</div><div></div><div>7</div></div><div><div>общая площадь</div><div></div><div>5 584</div></div><div><div>паркинг</div><div></div><div>Наземный</div></div></div></div>
<div class="col-4"><h4>Инженерные системы:</h4><div class="tableInfo" data-name="engTable"><div><div>вентиляция</div><div></div><div>естественная</div></div><div><div>кондиционирование</div><div></div><div>сплит-системы</div></div><div><div>телекоммуникации</div><div></div><div>интернет/телефония</div></div></div></div>

А как сделать так, чтобы в итоге получилось:

Местоположение:
округ ВАО
район Перово
метро Шоссе Энтузиастов
от метро 17 мин пешком
налоговая инспекция № 20

Технические параметры:
класс B
этажность 7
общая площадь 5 584
паркинг Наземный

Инженерные системы:
вентиляция естественная
кондиционирование сплит-системы
телекоммуникации интернет/телефония

То есть нужны данные между <div>. А как их получить, не могу разобраться.
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
То есть нужны данные между <div>. А как их получить, не могу разобраться.
Попробуйте вместо print(item) делать print(item.text).
 
  • Мне нравится
Реакции: Ivangeo

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
А как добавить разделитель, чтобы текст не сливался в одно полотно?
Вот так можно например:
Python:
import requests
from bs4 import BeautifulSoup
import csv


url = 'https://fortexgroup.ru/bc/plehanova-17-s10/'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0',
           'accept': '*/*'}

req = requests.get(url, headers=headers)
soup = BeautifulSoup(req.text, "lxml")
block = soup.find(class_="techInfo").find(class_="toLine").find_all(class_="col-4")

for i in block:
    header = i.find('h4')
    data = i.find('div', class_='tableInfo')
    print(header.text)
    for item in data.contents:
        print(' '.join([i.text for i in item]))

    print('-' * 25)
 
  • Мне нравится
Реакции: Ivangeo

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
На какие темы погуглить про python и html, чтобы в дальнейшем смог сделать самостоятельно?
Beautiful soup, циклы и list comprehension.
 
  • Мне нравится
Реакции: Ivangeo

Ivangeo

Новичок
Пользователь
Ноя 15, 2020
3
0
1
Попробуйте вместо print(item) делать print(item.text).
Получилось. Спасибо)

А как добавить разделитель, чтобы текст не сливался в одно полотно?

Я поставил разделитель, между блоками. Стало более читаемо:

_
Местоположение:округВАОрайонПеровометроШоссе Энтузиастовот метро17 мин пешкомналоговая инспекция№ 20
_
Технические параметры:классBэтажность7общая площадь5 584паркингНаземный
_
Инженерные системы:вентиляцияестественнаякондиционированиесплит-системытелекоммуникацииинтернет/телефония

Но все слова слились в одно. В мануалах по работе со строками не нашел ничего подходящего(
 

Ivangeo

Новичок
Пользователь
Ноя 15, 2020
3
0
1
Вот так можно например:

Да, то что нужно) Спасибо.

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

Форум IT Специалистов