Как мне удалить некоторый текст из без уникального идентификатора класса?

#python-3.x #web-scraping #beautifulsoup

#python-3.x #веб-очистка #beautifulsoup

Вопрос:

Я новичок в очистке, поэтому, пожалуйста, будьте терпеливы со мной. У меня есть этот HTML-код, и я хочу извлечь тип свойства, например, ‘Apartment’ , номер. кроватей, например, 2 и местоположение, например, только «Бирмингем». Я хочу сохранить каждый из них в списке. Проблема в том, что нет уникального идентификатора класса.

 <div class="extra">
    <span class="tablet-visible">
    <span class="item"><label><i class="ouricon classified"></i><b></b></label>
        <span>For Sale</span></span>
    </span>
    <span class="tablet-visible">
        <span class="item"><label><i class="ouricon house"></i><b></b></label>
            <span>Apartment</span></span>
        </span>
        <span class="">
            <span class="item"><label><i class="ouricon bed"></i><b></b></label>
                <span>2</span>
            </span>
        </span>
        <span class="">
            <span class="item"><label><i class="ouricon locationpin"></i><b></b></label>
                <span>Birmingham</span>
            </span>
        </span> 
</div>
  

Я попробовал этот код, но, конечно, он печатает весь текст в class=extra, включая «Для продажи», что не то, что я хочу.

 results = requests.get(url)
soup = BeautifulSoup(results.text, "html.parser")
desc_div = soup.find_all('div', attrs={"data-itemid": True})
for property in desc_div:
    extra = property.find('div', class_='extra')
    print(extra.text.strip())
  

Любая помощь будет высоко оценена.

Комментарии:

1. Также добавьте URL-адрес веб-сайта для исследования

Ответ №1:

Поскольку For Sale он находится в том же теге и классе, просто отфильтруйте его.

 from bs4 import BeautifulSoup

html = """
<div class="extra">
    <span class="tablet-visible">
    <span class="item"><label><i class="ouricon classified"></i><b></b></label>
        <span>For Sale</span></span>
    </span>
    <span class="tablet-visible">
        <span class="item"><label><i class="ouricon house"></i><b></b></label>
            <span>Apartment</span></span>
        </span>
        <span class="">
            <span class="item"><label><i class="ouricon bed"></i><b></b></label>
                <span>2</span>
            </span>
        </span>
        <span class="">
            <span class="item"><label><i class="ouricon locationpin"></i><b></b></label>
                <span>Birmingham</span>
            </span>
        </span> 
</div>
"""

soup = BeautifulSoup(html, "html.parser").find_all("span", {"class": "item"})
print([i.text.strip() for i in soup if i.text.strip() != "For Sale"])
  

Вывод:

 ['Apartment', '2', 'Birmingham']