как найти существующий номер в определенном теге, но этот тег существует более одного раза (beautifulsoup)

#python #web-scraping #beautifulsoup

Вопрос:

Я хочу найти значение 280, которое находится в bdi теге. Я пытался отследить его с помощью findAll метода, но он дает мне другой существующий номер в другом bdi теге

Формат HTML

img

Код

 def function():
    price=soup.findAll('bdi')[4].get_text()
    return price
 

Вывод

 199
340
 

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

1. если возможно, не могли бы вы поделиться URL-адресом, пожалуйста!

2. да, конечно, maroc4gaming.net/index.php/produit/erxung-j5-blue

3. индексы начинаются с 0 so, если вам нужен четвертый элемент, правильный индекс 3

Ответ №1:

Сначала найдите основной HTML-тег, который содержит этот bdi ценник, и на основе этого я использовал find_all метод для div тега, а из него по индексу 0 присутствуют данные, поэтому мы можем извлекать их в соответствии с ним!

 import requests
from bs4 import BeautifulSoup
response = requests.get('https://www.maroc4gaming.net/index.php/produit/erxung-j5-blue/')
soup = BeautifulSoup(response.text,'html.parser')
 

Здесь в коде я использовал сопоставление списка и цикл for в альтернативных условиях

 main_data=soup.find_all("div",class_="price-wrapper")[0].find_all("span",class_="woocommerce-Price-amount amount")
price_len=len(main_data)

if price_len==1:
    price=[i.text.split("xa0")[0] for i in main_data]
    print("Latest Price"   " "  price[0])
else:
    price=[i.text.split("xa0")[0] for i in main_data]
    print("Latest Price"   " "  price[1])
 

Вывод:

 '280.0'
 

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

1. это было здорово, но у меня есть еще одна проблема, если вы можете посмотреть этот сайт, у него есть повышение цены, поэтому, когда я запускаю этот код, он выдает мне значение 300 maroc4gaming.net/index.php/produit/casque-gamer-jedel-gh-230

2. знаете ли вы способ, как я могу не печатать самую старую цену?