#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']