Аватар для STARSsoft
0 / 0 / 0
Регистрация: 24.07.2016
Сообщений: 11

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

11.09.2022, 12:52. Показов 6893. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru