Beautifulsoup 将输出合并到列表中
我从一个网站上抓取产品描述。该产品有“旧价格”和“新价格”。除了一款(只有“新价格”)之外,所有产品都有这两款。我将这些值附加到一个空列表中。所以有四个列表,分别是“产品名称”、“产品旧价格”、“产品新价格”和“产品评论”。当我试图制作一个CSV文件时,它会给我一个错误“数组的长度必须相同”。此错误的原因是:“产品旧价格”列表有17个条目,其他三个列表有18个条目。如前所述,在一种产品中未给出“产品旧价格”。下面是我的代码:Beautifulsoup 将输出合并到列表中,beautifulsoup,Beautifulsoup,我从一个网站上抓取产品描述。该产品有“旧价格”和“新价格”。除了一款(只有“新价格”)之外,所有产品都有这两款。我将这些值附加到一个空列表中。所以有四个列表,分别是“产品名称”、“产品旧价格”、“产品新价格”和“产品评论”。当我试图制作一个CSV文件时,它会给我一个错误“数组的长度必须相同”。此错误的原因是:“产品旧价格”列表有17个条目,其他三个列表有18个条目。如前所述,在一种产品中未给出“产品旧价格”。下面是我的代码: from bs4 import BeautifulSoup impor
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社区应该为你感到骄傲。我从你身上学到了新东西#框滚动内容李。哇,很多时候在我看来,它更容易使用链接类或标签,这是值得一看-有乐趣@所以