#python #web-scraping #beautifulsoup
Вопрос:
Я хочу найти значение 280, которое находится в bdi
теге. Я пытался отследить его с помощью findAll
метода, но он дает мне другой существующий номер в другом bdi
теге
Формат HTML
Код
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. знаете ли вы способ, как я могу не печатать самую старую цену?