@Simple_Ian

Как сделать так, что бы каждый новый результат запроса парсера на страницу сохранялся в следующей ячейки столбца excel?

Есть парсер на python 3.7, который делает запрос на страницу и сохраняет данные в excel. Нужно что бы каждый новый запрос сохранялся в новую ячейку столбца excel. Я так понимаю нужно написать цикл? Использую openpyxl. На данный момент парсер пишет новые данные в одну и туже ячейку, т.е. переписывает старые данные.
Вот код:
import requests
from bs4 import BeautifulSoup
import openpyxl

# Parser

url = 'https://pythonworld.ru/osnovy/sintaksis-yazyka-python.html'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')

Parsed = soup.find('h2').text

# excelWriter
# create a new Excell file

xlsfile = openpyxl.Workbook()
xlsfile.sheetnames
sheet = xlsfile['Sheet']

#add data
data = [('Price'), Parsed]
for row, (data) in enumerate(data, start=1):
    sheet['A{}'.format(row)].value = data

#save
xlsfile.save('save.xlsx')

print(Parsed)
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
Перед выгрузкой узнавайте количество уже заполненных строк и потом начинайте со следующей.
for row, (data) in enumerate(data, start=sheet.max_row+1):
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ScriptKiddo
Во-первых - вы создаете каждый раз новый файл. Нужно проверять файл на существование

import os

filename = 'save.xlsx'
if os.path.exists(filename):
    xlsfile = openpyxl.load_workbook(filename)
else:
    xlsfile = openpyxl.Workbook()


Во-вторых - писать нужно со смещением. Смещение в данном случае - индекс последней строки на листе

max_rows = sheet.max_row
...
sheet['A{}'.format(row + max_rows)].value = data
Ответ написан
Ваш ответ на вопрос

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

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