Найти информацию в таблицах HTML с красивым супом - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь извлечь информацию из таблицы html (находится на странице этого примера https://www.detrasdelafachada.com/house-for-sale-marianao-havana-cuba/dcyktckvwjxhpl9):

<div class="row">
    <div class="col-label">
        Type of property:
    </div>
    <div class="col-datos">
        Apartment </div>
</div>
<div class="row">
    <div class="col-label">
        Building style:
    </div>
    <div class="col-datos">
        50 year </div>
</div>
<div class="row">
    <div class="col-label precio">
        Sale price:
    </div>
    <div class="col-datos precio">
        12 000 CUC </div>
</div>
<div class="row">
    <div class="col-label">
        Rooms:
    </div>
    <div class="col-datos">
        1 </div>
</div>
<div class="row">
    <div class="col-label">
        Bathrooms:
    </div>
    <div class="col-datos">
        1 </div>
</div>
<div class="row">
    <div class="col-label">
        Kitchens:
    </div>
    <div class="col-datos">
        1 </div>
</div>
<div class="row">
    <div class="col-label">
        Surface:
    </div>
    <div class="col-datos">
        38 mts2 </div>
</div>
<div class="row">
    <div class="col-label">
        Year of construction:
    </div>
    <div class="col-datos">
        1945 </div>
</div>
<div class="row">
    <div class="col-label">
        Building style:
    </div>
    <div class="col-datos">
        50 year </div>
</div>
<div class="row">
    <div class="col-label">
        Construction type:
    </div>
    <div class="col-datos">
        Masonry and plate </div>
</div>
<div class="row">
    <div class="col-label">
        Home conditions:
    </div>
    <div class="col-datos">
        Good </div>
</div>
<div class="row">
    <div class="col-label">
        Other peculiarities:
    </div>
</div>
<div class="row">

Используя Beautiful soup, как я могу найти значение, скажем, "Building style:" (среди других записей)?

Моя проблема в том, что я непосредственно нахожу класс, поскольку все записи в таблице имеют одинаковое имя класса div.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Например, если вы знаете, что хотите найти строку «Стиль здания:», вы можете захватить текст .next_sibling. Или просто используйте next:

>>> from bs4 import BeautifulSoup
>>> html = "<c><div>hello</div> <div>hi</div></c>"
>>> soup = BeautifulSoup(html, 'html.parser')
>>> print(soup.find(string="hello").find_next('div').contents[0])
hi

Если вы хотите получить их все, вы можете использовать .find_all, чтобы получить все теги div класса "row", а затем захватить дочерние элементы каждого из них.

data = []
soup = BeautifulSoup(html, 'html.parser')
for row in soup.find_all('div', class_="row"):
    rowdata = [ c.text.strip() for c in row.find_all('div')]
    data.append(rowdata)
print(data)
# Outputs the nested list:
#   [u'Type of property:', u'Apartment'], [u'Building style:', u'50 year'], etc ]
0 голосов
/ 07 января 2019

Вы можете перебрать каждую строку div и найти вложенные div значения:

from bs4 import BeautifulSoup as soup
import re
d = soup(content, 'html.parser')
results = [[re.sub('\s{2,}|\n+', '', i.text) for i in b.find_all('div')] for b in d.find_all('div', {'class':'row'})]

Выход:

[['Type of property:', 'Apartment '], ['Building style:', '50 year '], ['Sale price:', '12 000 CUC '], ['Rooms:', '1 '], ['Bathrooms:', '1 '], ['Kitchens:', '1 '], ['Surface:', '38 mts2 '], ['Year of construction:', '1945 '], ['Building style:', '50 year '], ['Construction type:', 'Masonry and plate '], ['Home conditions:', 'Good '], ['Other peculiarities:'], []]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...