Как получить строку из тега span в beautifulsoup - PullRequest
0 голосов
/ 13 января 2019

У меня проблема с выводом строки из тега span в beautifulsoup. Я попытался использовать атрибут text, но это дало мне AttributeError: NoneType объект не имеет атрибута text.

source = requests.get("https://www.k-ruoka.fi/kauppa/tuotehaku").text

soup = BeautifulSoup(source, "lxml")


product = soup.find("ul", class_="product-grid")


for listt in product.find_all("li"):
    kg = listt.find("span", class_="reference").text
    print(kg)

Код выше дает ошибку AttributeError. если я не использую .text, то это дает мне это:

<span class="reference">1,58<span class="slash">/</span>kg</span>

но я просто хочу получить "1,58" и "кг" от него.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Xay правильный. Проблема была в том, что вашим первым элементом был NoneType. NoneType.text выбросил эту ошибку. Другой способ, которым вы предложили Xay:

import requests
from bs4 import BeautifulSoup

source = requests.get("https://www.k-ruoka.fi/kauppa/tuotehaku").text

soup = BeautifulSoup(source, "lxml")



product = soup.find("ul", class_="product-grid")

kgs = [listt.find("span", class_="reference").text for listt in product.find_all("li") 
           if listt.find("span", class_="reference")]

for kg in kgs:
    print(kg)

Итак, что я сделал, чтобы получить килограммы, так это запросить текст, только если listt.find ("span", class _ = "reference") что-то поймал. Ни один не является ложным, поэтому он не будет собран.

0 голосов
/ 13 января 2019

Ваш код работает, все, что вам нужно, это проверка на NoneType в цикле for:

for listt in product.find_all("li"):
    kg = listt.find("span", class_="reference")
    if kg:
        print(kg.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...