@walkerstech

Не работает парсер в excel?

Здравствуйте, необходимо записать данные из tr в таблицу excel. На скрине данные которые парсятся с html файла, но их надо записать в excel. Но не записывает, в чем проблема. Может кто-то сможет решить?
На выходе данные которые спарсенный с html страницы, должны записаться в excel таблицу.
Где в A1, B1 , C1, D1, E1 должны быть записанные "ID", "Nick_Name", "Фракция", "Текст", "Время".
А в остальном А2,А3... В2,В3 и т.д., должны будут записанный, пример данных на скрине:
a3783b88f7.png
from bs4 import BeautifulSoup
from openpyxl import load_workbook
import xlwt

# Initialize a workbook
book = xlwt.Workbook()

# Add a sheet to the workbook
sheet1 = book.add_sheet("Лог")

# The data
cols = ["ID", "Nick_Name", "Фракция", "Текст", "Время"]


	with open("bank.html", "r", encoding="utf-8") as f:
	    
	    contents = f.read()
	 
	    soup = BeautifulSoup(contents, 'lxml')
	 
	    tags = soup.find_all(['th', 'tr'])
	    
	    for tag in tags:

txt = tag.text.split()

# Loop over the rows and columns and fill in the values
for num in range(50):
      row = sheet1.row(num)
      for index, col in enumerate(cols):
          value = txt[index]
          row.write(index, value)

# Save the result
book.save("test.xls")
  • Вопрос задан
  • 324 просмотра
Пригласить эксперта
Ответы на вопрос 1
@o5a
Из-за сбившихся отступов сложно сказать наверняка, но в таком состояни видно, что в txt записывается только одна последняя строка данных, т.к. txt = tag.text.split() каждый раз ее перезаписывает. Вместо этого думаю предполагалось записывать в txt вложенный массив строк.
txt = []
with open("bank.html", "r", encoding="utf-8") as f:
    contents = f.read()
    soup = BeautifulSoup(contents, 'lxml')
    tags = soup.find_all(['th', 'tr'])
    for tag in tags:
        txt.append(tag.text.split())


И затем в цикле записи соответственно проходить по этим строкам, т.е. изменить примерно так
for i, vals in enumerate(txt):
    row = sheet1.row(i)
    for index, col in enumerate(cols):
        value = vals[index]
        row.write(index, value)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы