#python #python-3.x #web-scraping #beautifulsoup
#python #python-3.x #очистка веб-страниц #beautifulsoup
Вопрос:
Я пытаюсь извлечь почтовый индекс и город из элементов html. Однако я не могу найти никакого способа захватить их по отдельности.
<div class="profile-info__address" itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress">
<img src="/Content/images/icons/location-pin.svg" class="icon-left">
1000 Bruxelles<br>Rue de Laeken 160
</div>
Ожидаемый результат:
zipcode = 1000
city = Bruxelles
Я пробовал с:
from bs4 import BeautifulSoup
html = """
<div class="profile-info__address" itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress">
<img src="/Content/images/icons/location-pin.svg" class="icon-left">
1000 Bruxelles<br>Rue de Laeken 160
</div>
"""
soup = BeautifulSoup(html,"html.parser")
address_container = [item.string.strip() for item in soup.select_one("[itemprop='address']") if item.string]
print(address_container)
Он выдает:
['', '1000 Bruxelles', 'Rue de Laeken 160']
Как я могу отделить два поля от адреса?
Примечание: начальный пробел, который вы видите в выходных данных, может отсутствовать не всегда.
Комментарии:
1. Всегда ли почтовый индекс перед названием города?
Ответ №1:
Если почтовый адрес (вроде) унифицирован, а почтовый индекс предшествует городу, вы можете проверить, начинается ли какой-либо из строковых элементов с цифры (или серии цифр, которые соответствуют длине почтового индекса).
Например:
import re
from bs4 import BeautifulSoup
html = """
<div class="profile-info__address" itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress">
<img src="/Content/images/icons/location-pin.svg" class="icon-left">
1000 Bruxelles<br>Rue de Laeken 160
</div>
"""
soup = BeautifulSoup(html, "html.parser").select_one("[itemprop='address']")
address_container = [item.string.strip() for item in soup if item.string]
filtered_address = [i for i in address_container if re.search(r"^d ", i)]
for item in filtered_address:
zip_code, city = item.split()
print(f"Zip: {zip_code}")
print(f"City: {city}")
Вывод:
Zip: 1000
City: Bruxelles
Комментарии:
1. Да, кажется, это хороший способ. Спасибо.