首页 > 解决方案 > 当使用beautifulsoup进行网页抓取然后保存到csv时,我只收到一行信息而不是所有需要的行

问题描述

免责声明:我是编码新手。

我认为我的问题在我的 for 循环中,但即使在浏览了 stackoverflow 上的已回答问题后,我也不确定要更改什么。所以,这是我关于我的问题的代码:

csv_file = open('converter_scrape.csv', 'w')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Category Name', 'Price'])
entries = soup.find_all('div', class_="prices")
for entry in entries:
    cat_name = entry.h3.text.strip()
    print(cat_name)
    cat_price = entry.p.text.strip()
    print(cat_price)
    csv_writer.writerow([cat_name, cat_price])
csv_file.close()

上面的脚本从网站上生成“小面包猫”和“$105-$200/each”。这是我想要的,但在这个之后还有更多。for 循环在检索到一个后停止。我正在寻找名称和相应的价格(小型面包猫、大型 GM 猫、大型外国猫等)。但是,我的 csv 仅获得第一个类别+价格,而不是全部。

<div class="prices">
    <div class="price-list">
        <div class="price ">
            <a href="https://X.com/metal/small-breadloaf-cat/">
                <h3>Small Breadloaf Cat</h3>
                <p> $105-$200/each </p>
            </a>
        </div>
        <div class="price ">
            <a href="https://X.com/metal/large-gm-cat/">
                <h3>Large GM Cat</h3>
                <p> $165-$256/each </p>
            </a>
        </div>
        <div class="price ">
            <a href="https://X.com/metal/large-foreign-cat/">
                <h3>Large Foreign Cat</h3>
                <p> $200-$351/each </p>
            </a>
        </div>
        <div class="price ">
            <a href="https://X.com/metal/xl-foreign-cat/">
                <h3>XL Foreign Cat</h3>
                <p> $350-$500/each </p>
            </a>
        </div>
        <div class="price ">
            <a href="https://X.com/metal/small-gm-cat/">
                <h3>Small GM Cat</h3>
                <p> $85-$168/each </p>
            </a>
        </div>
        <div class="price ">
            <a href="https://X.com/metal/small-foreign-cat/">
                <h3>Small Foreign Cat</h3>
                <p> $108-$149/each </p>
            </a>
        </div>

标签: pythonhtmlpython-3.xcsvbeautifulsoup

解决方案


在 for 循环中试试这个:

    
for entry in entries:

    entry.find({'class': 'price'})

find_all 方法只返回“价格”类,而您希望每个条目都包含在“价格”类中。所以我们需要两种查找方法。


推荐阅读