Данные парсинга не сохраняются в xlsx

Решил изучать парсинг. Первый мой парсер. не могу понять, почему собранные данные не сохраняются в xlsx-файл Данные собираются, в json сохраняется, а в xlsx нет. Ошибок никаких не выдает. Помогите разобраться

Вот код:

import json
import requests
import xlsxwriter
from bs4 import BeautifulSoup

OUT_FILENAME = 'out.json'
OUT_XLSX_FILENAME = 'out.xlsx'

def dump_to_json(filename, data, **kwargs):
  kwargs.setdefault('ensure_ascii', False)
  kwargs.setdefault('indent', 1)
  with open(OUT_FILENAME, 'w', encoding='utf-8') as f:
      json.dump(data, f, **kwargs)

def dump_to_xlsx(filename, data):
  if not len(data):
    return None
  with xlsxwriter.Workbook(filename) as workbook:
    ws = workbook.add_worksheet()
    headers = ['Название', 'Назв.(англ.)', 'Год выпуска', 'Страна', 'Рейтинг', 'Ссылка']
    bold = workbook.add_format({'bold': True})

    for col, h in enumerate(headers):
      ws.write_string(0, col, h, cell_format = bold)

    for item in enumerate(data, start=1):
      ws.write_string(row, 0, item['title_rus'])
      ws.write_string(row, 1, item['title_eng'])
      ws.write_string(row, 2, item['release'])
      ws.write_string(row, 3, item['count'])
      ws.write_string(row, 4, item['raiting'])
      ws.write_string(row, 5, item['url'])


url = "https://www.kinopoisk.ru/popular/films/?page=1&tab=all"

def get_html(url):
  r = requests.get(url)
  return r.text

def get_total_pages(html):
  soup = BeautifulSoup(html, 'lxml')
  pages = soup.find('div', class_='paginator _2oq0_M2giZyz6Yew9Gveww').find_all('a', class_='paginator__page-number')[-1].get('href')
  total_pages = pages.split('=')[1].split('&')[0]

  return int(total_pages)

data = []
def get_page_data(html):
  #data = []
  soup = BeautifulSoup(html, 'lxml')
  ads = soup.find('div', class_= 'selection-list').find_all('div', class_ = 'desktop-rating-selection-film-item')
  for ad in ads:
    #title, count, url, img, raiting
      try:
        title_rus = ad.find('div', class_= 'desktop-rating-selection-film-item__content-wrapper').find('p', class_='selection-film-item-meta__name').text.strip()
      except:
        title_rus = ''
      try:
        title_eng = ad.find('div', class_= 'desktop-rating-selection-film-item__content-wrapper').find('p', class_='selection-film-item-meta__original-name').text.strip().split(',')[0]
      except:
        title_eng = ''
      try:
        release = ad.find('div', class_= 'desktop-rating-selection-film-item__content-wrapper').find('p', class_='selection-film-item-meta__original-name').text.strip().split(',')[1]
      except:
        release = ''
      try:
        count = ad.find('span', class_='selection-film-item-meta__meta-additional-item').text
      except:
        count = ''
      try:
        raiting = ad.find('span', class_='rating__value rating__value_neutral').text
      except:
        raiting = ''
      try:
        url = 'https://www.kinopoisk.ru' + ad.find('a', class_='selection-film-item-meta__link').get('href')
      except:
        url = ''

      item = {'title_rus': title_rus,
              'title_eng': title_eng,
              'release': release,
              'count': count,
              'raiting': raiting,
              'url': url}
      print('\a {}'.format(url))
      data.append(item)
  return item


def main():
  url = 'https://www.kinopoisk.ru/popular/films/?page=1&tab=all'
  base_url = 'https://www.kinopoisk.ru/popular/films/?'
  page_part = 'page='
  query_part = '&tab=all'
  total_pages = get_total_pages(get_html(url))
  for i in range(1, 3): #total_pages+1):
     url_gen = f"{base_url}{page_part}{str(i)}{query_part}"
     html = get_html(url_gen)
     get_page_data(html)

  dump_to_json(OUT_FILENAME, data)
  dump_to_json(OUT_XLSX_FILENAME, data)



if __name__ == '__main__':
   main()

Ответы (1 шт):

Автор решения: Proksima

Вы в main два раза подряд вызываете dump_to_json, когда надо dump_to_xlsx.

→ Ссылка