Как лучше всего извлечь квадратные метры из строки, в которой также указано количество спален?

Я пытаюсь извлечь:

<div class="xl-surface-ch"> 
                            &nbsp;84 m²  &nbsp;&nbsp;&nbsp;2 bed.  
                        </div>

изссылки проблема в том, что мне нужно только "84" в этой строке (иногда они также превышают 2 или 3 цифры).

Дополнительная сложность заключается в том, что иногда квадратные метры не упоминаются, что выглядит так:

<div class="xl-surface-ch"> 
                             &nbsp;&nbsp;&nbsp;2 bed.  
                        </div>

и в этом случае мне нужно будет вернуть 0

Моя лучшая попытка:

    sqm = []
for item in soup.findAll('div', attrs={'class': 'xl-surface-ch'}):
    item = item.contents[0].strip()[0:4]
    item_clean = re.findall("[0-9]{2,4}", item)
    sqm.append(item_clean)

print(sqm)

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

[['84'], ['70'], ['80'], ['32'], ['149'], ['22'], ['75'], ['30'], ['23'], ['104'], [], ['95'], ['129'], ['26'], ['55'], ['26'], ['25'], ['28'], ['33'], ['210'], ['37'], ['69'], ['36'], ['19'], ['119'], ['20'], ['20'], ['129'], ['154'], ['25']]

Было бы действительно интересно, какое решение вы, ребята, придумываете, потому что я честно думаю, что на самом деле решения нет, тем более что у вас иногда есть здания без sqm ... может быть, с оператором if? В любом случае я собираюсь попробовать это прямо сейчас.

Заранее спасибо!

# extract beautifulsoup text-extraction
Источник
  • 0
    Вы должны включить больше возможных входов с их ожидаемыми выходами, если часть синтаксического анализа html работает, тогда это поможет сократить ваш минимально воспроизводимый пример до только части регулярного выражения.
  • 0
    Вы проверили мою правку? Мне удалось достать только первые 2-4 числа, которые он нашел. Что должно быть правильно. Теперь я пытаюсь распаковать и добавить их в столбец в Excel, но по какой-то причине я не могу распаковать и экспортировать его ...
  • 1
    Я думаю, что работаю над тем же сайтом, но по цене
  • 0
    Привет, Ахмед! Приятно снова найти тебя здесь. Правильно, я сейчас пытаюсь в этом разобраться. Я дошел до того, что мне удалось получить числа, но они находятся в списке внутри списка, который я не могу импортировать в строки Excel из-за того, что это список внутри списка ...
  • 0
    @MoofinTheExplorer добро пожаловать, проверьте мой ответ ниже
Codelisting
за 2 против
Лучший ответ
import requests
from bs4 import BeautifulSoup

r = requests.get(
    'https://www.immoweb.be/en/search/apartment/for-sale/leuven/3000')
soup = BeautifulSoup(r.text, 'html.parser')

for item in soup.findAll('div', attrs={'class': 'xl-surface-ch'}):
    item = item.text.strip()
    if 'm²' in item:
        print(item[0:item.find('m')])
    else:
        item = 0
        print(item)

Выход:

84 
70 
80 
32 
149 
22 
75 
30 
23 
104 
0
95 
129 
26 
55 
26 
25 
28 
33 
210 
37 
69 
36 
19 
119 
20 
20 
129 
154 
25 
  • 0
    Отлично! Но он пропускает те, которые не заполнены sqm. Поэтому он не будет правильно согласован с другими данными. Есть идеи, как с этим справиться? Возможно, добавив если нет? Я попробую это прямо сейчас.
  • 0
    @MoofinTheExplorer уже дает 0 если нет :) не забудьте принять мой ответ, если он вам помог
  • 0
    Выполнено! Большое спасибо! Вы действительно помогаете мне быстрее и лучше стать программистом.
  • 0
    Не могли бы вы просто объяснить мне эту часть? (item [0: item.find ('m')]) Я не совсем понимаю, как это возвращает результат, который я ищу.
  • 0
    @MoofinTheExplorer он начинается с первой строки и заканчивается, когда находит m
Codelisting
Популярные категории
На заметку программисту