Я использую Beautiful Soup в Python для очистки некоторых данных с сайта объявлений о недвижимости.
Мне удалось очистить отдельные элементы, которые мне нужны, но я хочу использовать более эффективный сценарий для извлечения всех данных одной командой, если это возможно.
Сложность в том, что различные элементы, которые мне нужны, находятся в разных классах.
Пока я пробовал следующее.
for listing in content.findAll('h2', attrs={"class": "listing-results-attr"}):
print(listing.text)
, который успешно выдает следующий список
15 room mansion for sale
3 bed barn conversion for sale
2 room duplex for sale
1 bed garden shed for sale
Отдельно для получения информации об адресе для каждого списка я успешно использовал следующее:
for address in content.findAll('a', attrs={"class": "listing-results-address"}):
print(address.text)
, который дает это
22 Acacia Avenue, CityName Postcode
100 Sleepy Hollow, CityName Postcode
742 Evergreen Terrace, CityName Postcode
31 Spooner Street, CityName Postcode
А для цены на недвижимость я использовал это ...
for prop_price in content.findAll('a', attrs={"class": "listing-results-price"}):
print(prop_price.text)
который дает ...
$350,000
$1,250,000
$750,000
$100,000
Это замечательно, однако мне нужно иметь возможность извлекать всю эту информацию более эффективным и производительным способом, чтобы все данные возвращались за один проход.
В настоящее время я могу сделать это, используя что-то вроде кода ниже:
all = content.select("a.listing-results-attr, h2.listing-results-address, a.listing-results-price")
Это работает несколько, но возвращает слишком много дополнительных HTML-тэгов и просто не так элегантно или изощренно, как мне требуется. Результаты следующие.
</a>, <h2 class="listing-results-attr">
<a href="redacted" style="text-decoration:underline;">15 room mansion for sale</a>
</h2>, <a class="listing-results-address" href="redacted">22 Acacia Avenue, CityName Postcode</a>, <a class="listing-results-price" href="redacted">
$350,000
Ожидаемые результаты должны выглядеть примерно так:
15 room mansion for sale
22 Acacia Avenue, CityName Postcode
$350,000
3 bed barn conversion for sale
100 Sleepy Hollow, CityName Postcode
$1,250,000
etc
etc
Затем мне нужно сохранить результаты в виде объектов JSON для последующего анализа.
Заранее спасибо.