【问题标题】:I'm getting the discount %, not the discounted price我得到的是折扣 %,而不是折扣价
【发布时间】:2021-05-29 08:39:04
【问题描述】:

我正在尝试使用 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%

【问题讨论】:

  • 也许可以计算一下?
  • 我可能可以这样做,但当我知道价格就在那儿时,那是不必要的,不是吗?
  • 那么,问题是如何在页面上找到它?
  • 是的,我不知道怎么在html里找到
  • 好的,你需要使用你的浏览器。导航到该页面,启动开发人员工具并使用“检查元素”。

标签: python beautifulsoup


【解决方案1】:

priceInner的结构如下

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

所以你应该多做一步,在你的cena 中找到带有class="c2" 的跨度,就像你找到带有class="priceInner" 的div 一样

【讨论】:

  • 对不起,我不知道该怎么做,你能帮我吗?
  • 那么你最初是怎么想出示例代码的呢?它应该类似于:cena_c2 = cena.find("span",{"class":"c2"})
  • 哦,哇,谢谢我尝试了很多次不同的变体,不知道为什么我没有尝试这个,再次非常感谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多