Проблема сохранения таблицы HTML в Excel с использованием Python - PullRequest
1 голос
/ 08 октября 2019

Это мой первый раз, когда я использую Python, и я пробую метод слома и собираю коды, доступные в сети, и в настоящее время я застрял при сохранении вывода в файл Excel.

Хорошо, так что сначалаМне нужно прочитать письмо из Outlook и получить данные внутри. Но он в табличном формате, то есть автор копирует и вставляет данные из Excel в виде таблицы, поэтому лучший способ, который я нашел, - преобразовать их в файл HTML.

import win32com.client
import xlsxwriter
import pandas as pd
import requests
from bs4 import BeautifulSoup

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
'''message = messages.GetLast()
body_content = message.Body
subject = message.Subject
categories = message.Categories
print(body_content)
print(subject)
print(categories)'''
string = "Monthly PPM Report"
for message in messages:
    if string in message.Subject:
        print(message.HTMLBody)
        Html_file= open("filename.html","w", encoding="utf-8")
        Html_file.write(message.HTMLBody)
        Html_file.close()

Итак, используя приведенный выше код, мне удалосьсохранить письмо как файл HTML. Следующий шаг - найти таблицу, нацеленную на класс div.

rfile  = open('filename.html')
rsoup  = BeautifulSoup(rfile)
nodes1  = rsoup.find('div',{'class':'MsoNormalTable'})

Когда я попытался распечатать, мне удалось получить нужную таблицу, но когда я попытался сохранить ее как файл Excel, используя nodes1.to_excel('test.xlsx') Я получаю эту ошибку.

node1.to_excel ('test.xlsx') AttributeError: У объекта 'NoneType' нет атрибута 'to_excel'

Любые предложения о том, чтошаг мне не хватает?

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Чтобы использовать метод pandas to_excel (), вам сначала понадобится pandas DataFrame

при условии, что node1 является объектом словаря:

data_frame = pd.DataFrame(data=nodes1)
data_frame.to_excel('label_name')
1 голос
/ 08 октября 2019

Вы можете прочитать таблицу, используя функцию pandas read_html:

import pandas as pd
rfile  = open('filename.html')
html = rfile.read()

# all tables in document
tab_list = pd.read_html(html)
# tables with header
tab_list = pd.read_html(html, header=0)
# table with attributes
tab_list = pd.read_html(html, attrs={'class':'xxx', 'id':'xxx', 'align':"center", 'cellspacing':"1", 'cellpadding':"4", 'border':"0"})

# your nodes1 from BeautifulSoup
tab_list = pd.read_html(str(nodes1))

# save first table
tab_list[0].to_excel('test.xlsx')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...