Как я могу выбрать элемент с несколькими классами в BeautifulSoup4 - Python? - PullRequest
0 голосов
/ 25 мая 2018

Здесь у нас есть небольшая часть html-страницы:

1 st scenario:
<p class="food_price">
  <span class="food_price on_sale">$45</span>
  <span class="food_price">$65</span>
</p>

2 nd scenario
<p class="food_price">
  <span class="price">$35</span>
</p>

Когда класс on_sale доступен, я хочу установить переменную price_sale = значение внутри диапазона.Когда это не так, я хочу установить значение переменной -1.

Этот код, который я использую:

price_sale     = product_item.find('span',class_='food_price on_sale')
price_price    = product_item.find('span',class_='food_price').text

print(price_sale) #when there is no 'food_price on_sale' display None

if price_sale=='None':
    price_sale = -1
else:
    price_sale = product_item.find('span',class_='price sale').text

print(price_sale)

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "/home/ila/vhosts/crawler/bucky.py", line 144, in <module>
    price_sale = product_item.find('span',class_='food_price on_sale').text
AttributeError: 'NoneType' object has no attribute 'text'

Кажется, что когда нет class="food_price on_sale", оно не входит в if price_sale=='None':.Я думаю, что кажется, что None не строка.

Кто-нибудь знает, как это сравнить?

1 Ответ

0 голосов
/ 25 мая 2018

Это должно помочь.

Демо:

from bs4 import BeautifulSoup
s = """<p class="food_price">
  <span class="food_price on_sale">$45</span>
  <span class="food_price">$65</span>
</p>
"""

soup = BeautifulSoup(s, "html.parser")
price_sale = soup.find('span',class_='food_price on_sale')

if price_sale:
    price_sale = price_sale.text
else:
    price_sale = -1
print(price_sale)

Вывод:

$45
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...