如何抓取和构造相同 div 但不同子 类 的价格?

How to scrape and construct price that is in the same div but different sub classes?

我正在尝试用两个不同的标签构建价格(见下图)。您如何嵌套搜索以使其在 div class="price"、span 和子标签中显示?

如何从 div class="price"

中的 span 和子标签中获取数字

我尝试了以下方法:

coldbeetrootsoup=BeautifulSoup(f,'html.parser')

try:
    price = coldbeetrootsoup.find("span",{"class": None}).text.replace('\n',"")
except:
    price = None

try:
    subprice = coldbeetrootsoup.find("sub",{"class": None}).text.replace('\n',"")
except:
    subprice = None

link: https://www.rimi.lt/e-parduotuve/lt/produktai/vaisiai-darzoves-ir-geles/vaisiai-ir-uogos/obuoliai-/fas-liet-obuoliai-ligol-nuraude-anyks-vnt/p/923923

目标:价格 1.39 欧元

你想要的是

import re

import requests
from bs4 import BeautifulSoup

html = requests.get(
    "https://www.rimi.lt/e-parduotuve/lt/produktai/vaisiai-darzoves-ir-geles/vaisiai-ir-uogos/obuoliai-/fas-liet-obuoliai-ligol-nuraude-anyks-vnt/p/923923").text


soup = BeautifulSoup(html, features="html.parser")

price_div = soup.find("div", {"class": "price"})
full_part = price_div.find("span").text
cents_part = price_div.find("sup").text
currency = price_div.find("sub").text

currency = re.sub("\s+", "", currency)

print(f"{full_part}.{cents_part} {currency}")  # 1.39 €/vnt.

你可以从定义你想要挖掘的 div 开始,在这种情况下它是 div 和 class 'price',你这样做只是就像您已经在尝试处理跨度一样:

price = soup.find('div', {'class' : 'price'})

一旦我们有了这个价格,我们就可以不用搜索整个 html,只搜索这个 div 中想要的标签,例如:

euro = price.find('span')
cent = price.find('sup')

现在要得到你想要的,你可以这样做:

print(f"{euro.text}.{cent.text}")

或者如果你想要浮点变量

price_tag = round((int(euro.text) + (int(cent.text)/100)),2)

这里我们divide分带100不然就不是分了,我们用round标签只取小数点后两位