@Vadimganin

Как сохранить результат работы парсера в файл .txt?

Я создал парсер и хочу сохранить результат вывода в консоль в файл .txt, но есть проблема.

Код:
import requests
from bs4 import BeautifulSoup as sup

page = 1

while True:
    response = requests.get("https://stopgame.ru/review/new/izumitelno/p" + str(page))
    html = sup(response.content, "html.parser")
    items = html.select(".items > .article-summary")

    if (len(items)):
        for elements in items:
            title = elements.select(".caption > a")
            res = title[0].text
            print(res)
            with open("games_list.txt", "w", encoding='utf-8') as file:
                file.write(res)

        page += 1
    else:
        break


Вывод:
Shadow Warrior 3: Обзор
Not for Broadcast: Обзор
Strange Horticulture: Обзор
Insomnis: Обзор
Supraland Six Inches Under: Обзор
Troubleshooter: Мы зря пропустили
Wolfstride: Обзор
Fights in Tight Spaces: Обзор
Gunfire Reborn: Обзор
White Shadows: Обзор
Ruined King: A League of Legends Story: Обзор
Shin Megami Tensei V: Обзор
Corpse Party (2021): Обзор
Inscryption: Обзор
The Riftbreaker: Обзор
UNSIGHTED: Обзор
UnMetal: Обзор
Impostor Factory: Обзор
Bonfire Peaks: Обзор
Eastward: Обзор
Severed Steel: Обзор
OPUS: Echo of Starsong: Обзор
Tales of Arise: Обзор
Black Book: Обзор
И так далее


Проблема в том, что в файле сохраняется только последняя строка, а не все строки указанные выше.
  • Вопрос задан
  • 1822 просмотра
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
...
with open("games_list.txt", "a", encoding='utf-8') as file:
...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
shurshur
@shurshur
Сисадмин, просто сисадмин...
Я, конечно, понимаю, что указанное куратором тэга решение будет работать, но вообще говоря оно всё равно неправильное. Легко увидеть, что в таком варианте при повторном запуске скрипта файл не будет пересоздан - в него будут добавлены всё те же записи ещё раз.

Тут ошибка в том, что файл открывается заново в каждой итерации цикла, что само по себе неразумно, а также и перезатирается его содержимое. Поэтому-то и получается одна строка в итоге. Для исправления надо вынести открытие файла на уровень выше, чем for. В этом случае он будет открыт один раз и закрыт только после завершения цикла.
Ответ написан
nki
@nki
bezkart.ru готовая система лояльности
ваш_файл.py > out.txt
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы