С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
 Аватар для STARSsoft
0 / 0 / 0
Регистрация: 24.07.2016
Сообщений: 11

Запись результатов парсинга в CSV файл

11.09.2022, 12:52. Показов 6883. Ответов 1

Студворк — интернет-сервис помощи студентам
Начал изучать парсинг сайтов на Python. Могу спарсить данные и вывести их на экран. В окне терминала все выглядит идеально. Но если допустим эти данные отправлять клиенту, то ему эти данные скорее всего нужны будут в виде файла. Пытаюсь записать результаты в CSV файл, но не получается. То либо только последняя строка записывается в файл в единственной строке, то либо в нужном количестве строк, но на все строки опять же дублируется последняя запись. Чую, что где то близко, но в голову ничего пока не лезет.

Нужно записать результат парсинга в CSV файл. Первый столбец это номер по порядку, второй - наименование товара, третий - цена в тенге.

В примере с кодом есть мусорные вещи, но это либо остатки поиска вариантов либо остатки от кода с пагинацией. Чистить буду потом, когда все заработает как надо. Да, знаю, что код можно улучшить и упростить, но я подбираюсь поэтапно к цели. Застрял на записи данных в файл.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import requests
from bs4 import BeautifulSoup
import csv
from csv import writer
 
 
 
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.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 OPR/90.0.4480.84 (Edition Yx 08)'
   
}  
 
params = {'page': 1}
# задаем число больше номера первой страницы, для старта цикла
pages = 20  # количество страниц
page = 1    # номер начальной страницы
n = 1       # Начало нумерации
 
 
url = 'https://www.sulpak.kz/f/smartfoniy?page=1'    # делаем запрос на страницу
response = requests.get(url)                        # обработка запроса метотдом get
soup = BeautifulSoup(response.text, 'lxml')         # создаем суп
items = soup.find_all('li', class_='tile-container')# разбираем ячейки товара
 
    
if page <= pages: # Если текущая страница меньше или равно количеству страниц всего
    for n, i in enumerate(items, start=n):      # задаем нумерацию для всех ячеек
        itemName = i.find('h3', class_='title').text.replace("Смартфон", "").strip() # делаем выборку из супа. Тут в теге ищем клас с названием класса
        itemPrice = i.find('div', class_='price')  # Ищем второе значение
        if itemPrice is None:                   # Обработчик, если вдруг нет искомого класса или тега во втором значении
            itemPrice = 'No Price'         # 
        else:
            itemPrice = itemPrice.text.replace("Цена:", "").replace("₸", "").strip() # Удаляем лишний текст и переносы 
      
        Index = n
        GoodName = itemName
        Price = itemPrice
 
        print(Index, GoodName, Price)   # Выводим на экран список товаров
        
       
 
        with open("Goods_Sulpak.csv", mode="w", newline = '', encoding='cp1251') as w_file:
            file_writer = csv.writer(w_file, delimiter = ";", lineterminator="\r")
            file_writer.writerow(["Index", "Good Name", "Price"])
            for Index, GoodName, Price in items:
                file_writer.writerow([n, itemName, itemPrice])
Результат работы парсера в окне терминала.


Результат сохранения в CSV файл
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2022, 12:52
Ответы с готовыми решениями:

Запись в CSV-файл из массива. Не является форматом csv!
В общем искал работу... Дали тестовое написать парсер для сайта с выводом информации в csv-файл. Всё написал, сбросил, пришёл ответ что у...

Запись в файл результата парсинга (SAX)
Здравствуйте. Прошу прощения за беспокойство. Обращаюсь к вам по причине собственной ограниченности. Дело вот в чем: Надо было распарсить...

Табулирование функции трех переменных + запись в файл результатов. Файл не пишется
Помогите найти ошибку. Функция трех переменных f=f(x,y,z), x y - заданы начальные и конечные значения и шаг, z - массив, вводимый...

1
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
11.09.2022, 13:38
Лучший ответ Сообщение было отмечено STARSsoft как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import requests
from bs4 import BeautifulSoup
import csv
from csv import writer
 
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.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 OPR/90.0.4480.84 (Edition Yx 08)'
 
}
 
params = {'page': 1}
# задаем число больше номера первой страницы, для старта цикла
pages = 20  # количество страниц
page = 1  # номер начальной страницы
n = 1  # Начало нумерации
 
url = 'https://www.sulpak.kz/f/smartfoniy?page=1'  # делаем запрос на страницу
response = requests.get(url)  # обработка запроса метотдом get
soup = BeautifulSoup(response.text, 'lxml')  # создаем суп
items = soup.find_all('li', class_='tile-container')  # разбираем ячейки товара
 
result = []
if page <= pages:  # Если текущая страница меньше или равно количеству страниц всего
    for n, i in enumerate(items, start=n):  # задаем нумерацию для всех ячеек
        itemName = i.find('h3', class_='title').text.replace("Смартфон",
                                                             "").strip()  # делаем выборку из супа. Тут в теге ищем клас с названием класса
        itemPrice = i.find('div', class_='price')  # Ищем второе значение
        if itemPrice is None:  # Обработчик, если вдруг нет искомого класса или тега во втором значении
            itemPrice = 'No Price'  #
        else:
            itemPrice = itemPrice.text.replace("Цена:", "").replace("₸", "").strip()  # Удаляем лишний текст и переносы
 
        Index = n
        GoodName = itemName
        Price = itemPrice
 
        print(Index, GoodName, Price)  # Выводим на экран список товаров
 
        result.append((Index, GoodName, Price))
 
with open("Goods_Sulpak.csv", mode="w", newline='', encoding='cp1251') as w_file:
    file_writer = csv.writer(w_file, delimiter=";", lineterminator="\r")
    file_writer.writerows(result)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.09.2022, 13:38
Помогаю со студенческими работами здесь

Организовать запись введенных значений в текстовый файл, а также вывод полученных результатов в этот же файл
Организовать запись введенных значений в текстовый файл, а также вывод полученных результатов в этот же файл Добавлено через 7 часов...

Запись в csv файл
Считываю Лист объектов, делаю проверку по ключевому слову и нужно записать найденное в новый файл. Пыталась сделать через streamwriter,...

Запись в csv файл
Как сделать так чтобы результаты выполнения программы записывались в csv файл?

запись в csv файл
Добрый день,пытаюсь записать в csv файл таблицу mysql ,однако в файл попадает также весь html код страницы с которой выполняется код,в чём...

Запись в csv файл
Добрый день, сразу хочу сказать, что я далекий от программирования человек, но кровь из носа понадобился простой скрипт, который я и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru