Я предлагаю использовать библиотеку Python CSV, чтобы помочь с написанием вашего файла.Объект csv.writer()
, имеющий список элементов, автоматически добавляет запятые между вашими элементами, и если какой-либо элемент содержит запятую, он автоматически заключает запись в кавычки (что является правильным способом обработки).После этого файл будет загружен правильно.
Кроме того, ваша переменная price
нуждается в небольшом обрезании, поскольку она содержит ряд конечных символов, которые необходимо сначала удалить.
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import csv
my_url = "https://www.newegg.ca/Product/ProductList.aspx?Submit=ENE&N=100007708%20601210955%20601203901%20601294835%20601295933%20601194948&IsNodeId=1&bop=And&Order=BESTSELLING&PageSize=96"
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll("div",{"class":"item-container"})
filename = "GPU Prices.csv"
header = ['Price', 'Product Brand', 'Product Name', 'Shipping Cost']
with open(filename, 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow(header)
for container in containers:
price_container = container.findAll("li", {"class":"price-current"})
price = price_container[0].text.replace('\xa0', ' ').strip(' –\r\n|')
brand = container.div.div.a.img["title"]
title_container = container.findAll("a", {"class":"item-title"})
product_name = title_container[0].text
shipping_container = container.findAll("li", {"class":"price-ship"})
shipping = shipping_container[0].text.strip()
csv_output.writerow([price, brand, product_name, shipping])
GivingВы GPU Prices.csv
начинаете как:
Price,Product Brand,Product Name,Shipping Cost
"$1,079.99 (5 Offers)",ASUS,ASUS ROG GeForce GTX 1080 Ti DirectX 12 STRIX-GTX1080TI-O11G-GAMING 11GB 352-Bit GDDR5X PCI Express 3.0 HDCP Ready Video Card,$4.99 Shipping
$794.99 (5 Offers),ASUS,ASUS ROG GeForce GTX 1080 STRIX-GTX1080-A8G-GAMING 8GB 256-Bit GDDR5X PCI Express 3.0 HDCP Ready Video Card,$4.99 Shipping
Посмотрите, как цена во второй строке не содержит запятой, поэтому не заключена в кавычки.Это правильно и будет корректно обрабатываться таким приложением, как Excel.