首页 > 解决方案 > 我得到的是折扣 %,而不是折扣价

问题描述

我正在尝试使用 bs4 构建一个网络爬虫,一切正常,除了当商品打折时,它输出折扣百分比,而不是价格,我不知道如何获得价格。

elif meno_karty == "8":
    #710
    page_url = "https://www.alza.sk/graficke-karty-s-cipom-nvidia-geforce-gt710/18858832.htm"

    uClient = uReq(page_url)
    page_html = uClient.read()
    uClient.close()

    page_soup = soup(page_html, "html.parser")
    containers = page_soup.findAll("div",{"class":"browsingitem"})

    container = containers[0]
    while alwaysTrue == True:
        for container in containers:
            meno = container.div.div.a.img["alt"].replace(" - Grafická karta", "")
            cena = container.find("div",{"class":"priceInner"})
            cas = datetime.now()
            cas_teraz = cas.strftime("%H:%M:%S")
            print("[" + cas_teraz + "]" + f"{Fore.CYAN} [MENO] {Style.RESET_ALL}" + meno)
            print("[" + cas_teraz + "]" + f"{Fore.GREEN} [CENA] {Style.RESET_ALL}{Fore.RED}" + cena.span.text.replace("Cena nebola stanovená", "X") + Fore.WHITE)
            if "€" in cena.span.text:
                f = open("stock.txt", "a")
                f.write(cas_teraz + " " + meno + " " + cena.span.text + "\n")
                f.close()
                playsound("ding.wav")
            else:
                time.sleep(0.1)
        time.sleep(int(refresh))
Output:
[10:33:04] [MENO] GAINWARD GT710 2GB DDR3 SilentFX
[10:33:04] [CENA] 57,90 €
[10:33:06] [MENO] ASUS GeForce GT 710 SL-2GD5
[10:33:06] [CENA] 80,90 €
[10:33:08] [MENO] ASUS GeForce GT 710 SL-2GD5-BRK
[10:33:08] [CENA] 81,90 €
[10:33:10] [MENO] GIGABYTE GeForce GT 710 2GB
[10:33:10] [CENA] -9%

标签: pythonbeautifulsoup

解决方案


priceInner 的结构如下

<div class="priceInner">
   <div class="npc">
      <span class="np">-9%</span>
      <span class="np2">57,90&nbsp;€&lt;/span>
   </div>
   <span class="c2">52,57&nbsp;€&lt;/span>
   <span class="c1">bez DPH <b>43,81&nbsp;€&lt;/b></span>
</div>

所以你应该多走一步,在你的class="c2"内部找到跨度,cena就像你找到 div 一样class="priceInner"


推荐阅读