Beautifulsoup 将输出合并到列表中

Beautifulsoup 将输出合并到列表中,beautifulsoup,Beautifulsoup,我从一个网站上抓取产品描述。该产品有“旧价格”和“新价格”。除了一款(只有“新价格”)之外,所有产品都有这两款。我将这些值附加到一个空列表中。所以有四个列表,分别是“产品名称”、“产品旧价格”、“产品新价格”和“产品评论”。当我试图制作一个CSV文件时,它会给我一个错误“数组的长度必须相同”。此错误的原因是:“产品旧价格”列表有17个条目,其他三个列表有18个条目。如前所述,在一种产品中未给出“产品旧价格”。下面是我的代码: from bs4 import BeautifulSoup impor

我从一个网站上抓取产品描述。该产品有“旧价格”和“新价格”。除了一款(只有“新价格”)之外,所有产品都有这两款。我将这些值附加到一个空列表中。所以有四个列表,分别是“产品名称”、“产品旧价格”、“产品新价格”和“产品评论”。当我试图制作一个CSV文件时,它会给我一个错误“数组的长度必须相同”。此错误的原因是:“产品旧价格”列表有17个条目,其他三个列表有18个条目。如前所述,在一种产品中未给出“产品旧价格”。下面是我的代码:

from bs4 import BeautifulSoup
import requests
import pandas as pd
url = "https://www.petplanet.co.uk/d7/dog_food"
r = requests.get(url)
soup = BeautifulSoup(r.content)
prod_name =[]
prod_old_price = []
prod_new_price = []
prod_reviews = []
item = soup.findAll("a", class_ = "thumbLink")
for name in item[0:15]:
    pro_name = name.get("title")
    prod_name.append(pro_name)
price = soup.findAll("span", class_ = "price right")
for prices in price:
    pro_new_price1 = prices.text
    pro_new_price = pro_new_price1.replace("آ"," ")
    prod_new_price.append(pro_new_price)
old_price = soup.findAll("span", class_ = "price-old")
for old_pri in old_price:
    pro_old_price = old_pri.text
    prod_old_price.append(pro_old_price)

reviews = soup.findAll("span", class_ = "text-prod-review-score")
for rev in reviews:
    pro_reviews = (len(rev))
    prod_reviews.append(pro_reviews)
old_price = soup.findAll("span", class_ = "price-old")
for old_pri in old_price:
    pro_old_price = old_pri.text
    prod_old_price.append(pro_old_price)

pet_products = pd.DataFrame({"Product Name": prod_name, "Product Old Price": prod_old_price, "Product New Price": prod_new_price, "Product Reviews     as # of Star": prod_reviews})
pet_products.to_csv("Pets Products.csv")
我想要“不适用”或“无”,如果没有给出“产品旧价格”。 或者还有别的办法。 谢谢你的推荐 以另一种方式循环产品,创建
目录的
列表
我认为更容易处理,也可以使用
find_all()
而不是旧版本的
findAll()

会发生什么? 原因
old\u price
不在
页面\u source
中如果没有
sale\u price
您将找不到正确的位置来设置搜索方式中的
NA

看看我的示例-如果没有
old_price
,则会引发错误,但您可以使用它来创建
NA
值:

try:
    old_price = product.find("span", class_ = "price-old").get_text(strip=True)
except:
    old_price = 'NA'
示例

from bs4 import BeautifulSoup
import requests
import pandas as pd
url = "https://www.petplanet.co.uk/d7/dog_food"

r = requests.get(url)
soup = BeautifulSoup(r.content)

p_data = []

for product in soup.select('div#box-scroll-content li'):
    new_price = product.find("span", class_ = "price right").get_text().replace("آ"," ")
    try:
        old_price = product.find("span", class_ = "price-old").get_text(strip=True)
    except:
        old_price = 'NA'
    
    p_data.append({
        'new_price': new_price,
        'old_price': old_price
    })
    
pd.DataFrame(p_data)
输出

    new_price   old_price
0   £69.99  £76.99
1   £2.19   None
2   £6.99   £11.49
3   £6.99   £10.99
4   £0.89   £1.00

帮助我们帮助您-请改进您的问题,以便我们能够重现您的问题。谢谢|需要更多信息:url、源代码、更多您编写的内容、最终预期输出)@HedgeHog请查看以上完整代码。提前感谢我想告诉你“你很棒”,StackOverflow社区应该为你感到骄傲。我从你身上学到了新东西#框滚动内容李。哇,很多时候在我看来,它更容易使用链接类或标签,这是值得一看-有乐趣@所以