BS4 webscraping Получает текст из нескольких элементов

#web-scraping #beautifulsoup

#соскабливание полотна #beautifulsoup

Вопрос:

Безуспешно пытаюсь извлечь несколько элементов из bs4 Find_all в виде текста

пробовал Get_text и для X в Y:

Пожалуйста, советы!

 import requests
import re
from bs4 import BeautifulSoup as bs

URL = "URLLINK"

r = requests.get(URL)

soup = bs(r.content)

data = soup.find_all('span', attrs= {"class": "XXX"})

print(data)```
 

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

1. Можете ли вы показать нам, что ваш скрипт выводит на консоль? Убедитесь, что span элементы существуют, соответствующие предоставленному классу

2. soup = bs(r.content) [<span class="sold-property-listing__subheading sold-property-listing--left"> Slutpris 1 400 000 kr </span>, <span class="sold-property-listing__subheading sold-property-listing--left"> Slutpris 1 950 000 kr </span>, <span class="sold-property-listing__subheading sold-property-listing--left"> Slutpris 2 115 000 kr </span>, <span class="sold-property-listing__subheading sold-property-listing--left"> Slutpris 1 900 000 kr ]

3. Кроме того, каков ожидаемый результат? Потому что метод find_all действительно возвращает что-то

4. Хотите, чтобы он напечатал, например, «Slutpris 1 400 000 kr». Предпочтительно выделить их в CSV-файл или что-то подобное

5. печать (данные [0].текст) печать (данные [1].текст), кажется, делает свое дело

Ответ №1:

лучше использовать use CSS селектор или .select() функцию

 from bs4 import BeautifulSoup

html = '''<span class="sold-property-listing__subheading sold-property-listing--left">         Slutpris 1 400 000 kr </span>, <span class="sold-property-listing__subheading sold-property-listing--left">         Slutpris 1 950 000 kr </span>, <span class="sold-property-listing__subheading sold-property-listing--left">         Slutpris 2 115 000 kr </span>, <span class="sold-property-listing__subheading sold-property-listing--left">         Slutpris 1 900 000 kr</span>'''

soup = BeautifulSoup(html, 'html.parser')
spans = soup.select('.sold-property-listing__subheading')

# or
# spans = soup.select('.sold-property-listing__subheading.sold-property-listing--left')

for s in spans:
  print(s.text)