【发布时间】:2020-10-16 18:25:46
【问题描述】:
我正在尝试获取页面上显示的产品名称、链接和价格的所有值。每个占一行并用逗号分隔。
我已经编写了可以在类似网站上运行的代码,但由于某种原因,它只将第一个结果写入 CSV。
import requests
from bs4 import BeautifulSoup
from csv import writer
response = requests.get('https://www.micoca-cola.cl/bebidas/coca-cola')
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.find_all(class_='prateleira vitrine n12colunas')
with open('coca.csv', 'w', newline='') as csv_file:
csv_writer = writer(csv_file)
headers = ['Producto', 'Link', 'Precio']
csv_writer.writerow(headers)
for item in items:
producto = item.find(class_='product-block-name').get_text()
link = item.find('a')['href']
price = item.find(class_='bestPrice').get_text().replace('\n', '').replace('"', '').replace(' ', '')
csv_writer.writerow([producto, link, price])
这给出了以下结果: 产品、链接、Precio “Refill 8 Coca-Cola Sin Azúcar 可回收 2,0 lt。(不包括包装)”,https://www.micoca-cola.cl/refill-8-coca-cola-sin-azucar-retornable-20-lt -no-incluye-envases/p,"$9.520,00"
但是该页面上还有其他产品,我想将它们包含在自己的行中。
缺少什么?
【问题讨论】:
-
您是否尝试过调试它?
items中有多少项? -
如果网站只向您的脚本返回一行,则可能没有任何遗漏,因为返回到您的脚本的数据很可能与您在浏览器中看到的不同。您需要证明那里返回的数据比您的脚本写入 CSV 的数据多。
-
网页源中只有一个元素具有第一个类名。尝试检查 chrome devtools 中所有条目的通用定位器。用通用定位器替换此定位器将导致列出
items中的所有记录
标签: python csv beautifulsoup