BeautifulSoup不会返回它应该的所有元素

我正在尝试从Beautifulsoup的以下网站导入所有优惠。

from bs4 import BeautifulSoup as soup 
from urllib.request import urlopen as uReq
import requests
my_url='https://www.promobit.com.br/promocoes/playstation-4/s/'
uclient=uReq(my_url)
page_html=uclient.read()
uclient.close()
page_soup=soup(page_html, "html.parser")
containers=page_soup.findAll("div",{"class":"in-size"})

但是,当我检查列表的长度时,而不是获得我期望的值96,而是返回3。

print(len(containers))
>>> 3

由于某些原因,当我在“容器”中打印文本时,我从一些标有“ de graca”的商品中获得了数据。

我尝试使用其他解析器,但是结果仍然错误。

评论
  • yut
    yut 回复

    目前尚不清楚您要获取什么。你是说这个吗?

    containers=page_soup.findAll("div",{"class":"pr-tl-card"})
    

    这将返回该页面的96个项目。

  • 一起疯了
    一起疯了 回复

    因此,您在用于查找元素的选择器中犯了错误。 如果在检查了该页面上的元素之后在元素选项卡中按ctrl + f,则会发现只有3个节点为“ in-size”类。因此长度为3。

    我已使用正确的选择器修改了您的代码位。我正在做的是找到ID为“ offers”的容器,它是所有商品的父容器。并且,如果您查看html结构,您会注意到每个ser拥有的所有卡都具有“ pr-tl-card”类。

    from bs4 import BeautifulSoup as soup 
    from urllib.request import urlopen as uReq
    import requests
    my_url='https://www.promobit.com.br/promocoes/playstation-4/s/'
    uclient=uReq(my_url)
    page_html=uclient.read()
    uclient.close()
    page_soup=soup(page_html, "html.parser")
    offers=page_soup.select("#offers div.pr-tl-card")
    len(offer_container)