使用请求解析Amazon上的产品标题

2024-09-30 10:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

从亚马逊畅销书列表中提取的源代码:

<div class="p13n-sc-truncate p13n-sc-line-clamp-2" aria-hidden="true" data-rows="2">
        Fingerlings Light Up Unicorn - Mackenzie (White) - Friendly Interactive Toy by WowWee
    </div>

........ omitted code here..........

    <div class="p13n-sc-truncate p13n-sc-line-clamp-2" aria-hidden="true" data-rows="2">
        Rocketbook Everlast Reusable Smart Notebook, Executive Size
    </div>

我想去亚马逊网站并调出页面上所有最畅销的商品。上面的代码是从当前页面中提取的源代码(页面每小时更新一次,因此项目名称不同,但类相同)。所以在这种情况下,我想让它拉名字:

“Rocketbook Everlast可重复使用的智能笔记本,行政大小”以及“鱼苗点亮独角兽-麦肯齐(白色)-友好互动玩具沃维”。你知道吗

我打算这样做:

r = requests.get("https://www.amazon.com/Best-Sellers-Amazon-Launchpad/zgbs/boost/ref=zg_bs_nav_0")
soup = BeautifulSoup(get_cart.text,"lxml")
n = soup.find("div",{'class':'p13n-sc-truncated'})

我认为这种方法是行不通的,因为一个类在页面源代码中随处可见,这很可能会产生一个错误,因为有2个类被多次提及,第二个类的文本是如何产生的?它会只说产品名称而不说别的吗?你知道吗


Tags: divtruedata源代码line页面hiddenclass
1条回答
网友
1楼 · 发布于 2024-09-30 10:31:31

对,这个类对于这个页面来说有点太泛化了。你能做的是首先确定畅销商品所在的集装箱。例如,可以是:

soup.select("ol#zg-ordered-list > li")

现在,您只能在物品容器内操作,这会严重缩小范围:

for product in soup.select("ol#zg-ordered-list > li"):
    product_name = product.select_one(".p13n-sc-truncated").get_text()
    print(product_name)

或者,您可以从产品图像的alt属性中获取产品标题:

for product in soup.select("ol#zg-ordered-list > li"):
    product_name = product.select_one("img[alt]")["alt"]
    print(product_name)

相关问题 更多 >

    热门问题