Запятыми отделяется каждый символ в CSV файле при выводе
Написал простой парсер, но при выводе в csv списка значений принтеров каждый символ отделяется запятой. В чем может быть проблема?
Код:
import requests
from bs4 import BeautifulSoup as BS
import csv
p = 1
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}
result_data = []
while True:
url = "https://global.pantum.com/product-center/p-" + str(p) + "/#content"
page = requests.get(url, headers=headers)
save_data = page.text
with open("index.html", "w", encoding="utf-8") as file:
file.write(save_data)
with open("index.html") as file:
data = file.read()
soup = BS(data, 'html.parser')
is_new_hot_device = printers = None
have_data = True
try:
is_new_hot_device = soup.find("div", class_="pro_list cf").find_all("span")
printers = soup.find("div", class_="pro_list cf").find_all("dd")
list(is_new_hot_device)
list(printers)
except Exception:
have_data = False
if have_data and len(printers):
for i in range(0, len(printers)):
if i >= len(is_new_hot_device):
result_data.append(printers[i].text.strip())
elif len(is_new_hot_device):
result_data.append(printers[i].text.strip() + " " + is_new_hot_device[i].text.strip().upper())
p += 1
else:
break
print(result_data)
with open("pantum_result_data.csv", "w") as file:
wr = csv.writer(file)
wr.writerow(
("Название_модели", "Актуальность")
)
with open("pantum_result_data.csv", "a") as file:
wr = csv.writer(file)
wr.writerows(
result_data
)
Ответы (1 шт):
Автор решения: Сергей Ш
→ Ссылка
import requests
from bs4 import BeautifulSoup as BS
import csv
p = 1
with open("pantum_result_data.csv", 'w', newline='', encoding='utf-8') as file:
wr = csv.writer(file)
wr.writerow(("Название_модели", "Актуальность"))
while True:
url = f"https://global.pantum.com/product-center/p-{p}"
page = requests.get(url)
soup = BS(page.text, 'html.parser')
cards = soup.find(class_="pro_list")
if not cards:
break
for card in cards("dl"): # cards.find_all("dl")
is_new_hot_device = card.find("span")
is_new_hot_device = is_new_hot_device.text if is_new_hot_device else None
printer = card.find("dd").text.strip()
wr.writerow((printer, is_new_hot_device))
p += 1
