#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)