无法使用 beautifulsoup 获取 div 元素内的所有 span 标签

问题描述 投票:0回答:1

我正在亚马逊上抓取产品详细信息页面文本,但我以项目符号列表的形式返回数据。我想将数据添加为其他抓取数据旁边的列。

csv 导出 亚马逊产品详情

正在运行的代码的一部分

def get_availability(soup):
try:
    available = soup.find("div", attrs={'id':'availability'})
    available = available.find("span").string.strip()

except AttributeError:
    available = "Not Available" 

return available

我像上面一样模仿了这部分代码,但它没有按预期工作

# Function to extract Product Details
def get_pd(soup):
    try:
        pd = soup.find("div", attrs={'id':'detailBullets_feature_div'}).text.strip()
        pd = pd.find("span").string.strip()

    except AttributeError:
        pd = ""

    return pd

当我删除这部分代码时

 pd = pd.find("span").string.strip()

我得到了项目符号列表,但结果不是我想要的。结果应该并排放置,而不是垂直放置。

python web-scraping beautifulsoup
1个回答
0
投票

你可以尝试:

import re
import requests
from bs4 import BeautifulSoup

url = "https://www.amazon.nl/-/en/Multivitamins-minerals-high-dosage-containing/dp/B075RCPZ3P/ref=sr_1_6?crid=1WFDIDCT1PXE8&dib=eyJ2IjoiMSJ9.Pv8fNYUtGuBYdebOTisLFgv9KuLU_Pb1FMnnf4Q8FMLHlQivImbxYNVwbRBJ2YOA6M-zlNIHqgWqDzMZfhYePmXlUI15lwwP6VQTH7egA0p_Maz2vsBzdbYZCpZmEZX1O2NaH2B50BXlPQfmQyn_X3Zy_qiZ4TJRKc9rv30-oUhlPDIxXKWa_2Sr1t7BR7hl3Ks2zQd0ZmaBIX3w2M2o183BmuHvi9haYAdE916Rjz8VK7xBbRyW5VhaqJlYpO1iEsn5OhL9HTbBaqTKQ4eZXEUam3py0rWWnWBWb9B7b54.b_p-s2SKiuGSEs7A04s5RAxdHAwHKRMbXPi3OPg-leM&dib_tag=se&keywords=vitamine&qid=1726325837&sprefix=vitamine%2Caps%2C225&sr=8-6"

headers = {
    "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:130.0) Gecko/20100101 Firefox/130.0"
}

soup = BeautifulSoup(requests.get(url, headers=headers).content, "html.parser")

details = soup.select(
    'h2:-soup-contains("Product details") ~ div > ul, h2:-soup-contains("Product details") ~ ul'
)

data = {"title": soup.title.text}
for ul in details:
    for li in ul.find_all("li", recursive=False):
        t = re.sub(
            r"\s{2,}", " ", li.text.strip().replace("\u200f", "").replace("\u200e", "")
        )
        k, v = t.split(":", maxsplit=1)
        data[k] = v

df = pd.DataFrame([data])
print(df)

打印:

标题 已被制造商停产 产品尺寸 首次可用日期 制造商 ASIN 制造商参考 原产国 保证软件更新直至 畅销排行榜 顾客评价
高剂量多种维生素和矿物质 - 450 片含有所有 A-Z 维生素 - 钙、生物素、硒、锌、叶酸、维生素 A、B1、B2、B3、B5、B6、B12、C、D3、E:Amazon.nl:健康与个人护理 没有 6 x 6 x 10 厘米; 225克 2020 年 6 月 5 日 荣耀感觉 B075RCPZ3P gf-multiv-450 德国 未知 健康与个人护理中第 22 位(查看健康与个人护理中前 100 名) 多种维生素营养补充剂中第 1 位 4.4 4.4 颗星,最多 5 颗星 18,107 评分
© www.soinside.com 2019 - 2024. All rights reserved.