我正在用一个来自pandas数据框的表格生成HTML电子邮件。我正在使用pandas样式将CSS添加到结果表中,但是无法使表的边框看起来正确。 CSS不会应用于表格,因此我的border-collapse标签被忽略了,每个单元格周围都有单独的边框。
我已经检查了生成的HTML,并且在CSS中有一个与表相关的id标记。这适用于以td标签为目标但不在table标签上的选择器。当我从HTML手动删除此ID时,生成的输出很好。我的问题是如何在python中获得这种效果?
我正在使用python 2.7.2和pandas 0.23.4
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,-5,6]])
styles = [ {'selector': 'table',
'props': [('border', '1px solid lightgrey'),
('border-collapse', 'collapse')]},
{'selector': 'tbody td',
'props': [('border', '1px solid lightgrey'),
('font-size', '11.5px'),
('font-family', 'arial'),
('text-align', 'center'),
('width', '120')]}
]
html = df.style.set_table_styles(styles).render()
实际有#T_094a3270_141f_11e9_99b1_18a905bf8925 table {
<style type="text/css" >
#T_094a3270_141f_11e9_99b1_18a905bf8925 table {
... params
} #T_094a3270_141f_11e9_99b1_18a905bf8925 tbody td {
... params
}</style>
<table id="T_094a3270_141f_11e9_99b1_18a905bf8925" >
... etc
预期只有table {
<style type="text/css" >
table {
... params
} #T_094a3270_141f_11e9_99b1_18a905bf8925 tbody td {
... params
}</style>
<table id="T_094a3270_141f_11e9_99b1_18a905bf8925" >
... etc
答案 0 :(得分:1)
我很想知道是否有人对此有答案,但是我已经通过手动添加字符串
解决了<style type="text/css" >
table {
border: 1px solid lightgrey;
border-collapse: collapse;
</style>
创建后到我的html的前面。
尽管在浏览器中看起来不错,但这仍然对html电子邮件毫无影响。
谢谢
答案 1 :(得分:1)
我认为,可以使用一个小技巧来对表格本身进行样式设置。由于import requests
import pandas as pd
from urllib.request import urlopen
from bs4 import BeautifulSoup
import csv
html = urlopen('https://www.marketwatch.com/investing/stock/MMM/financials/')
soup = BeautifulSoup(html, 'html.parser')
ids = ['cash-flow','cash-flow/quarter']
with open("news.csv", "w", newline="", encoding='utf-8') as f_news:
csv_news = csv.writer(f_news)
csv_news.writerow(["A"])
for id in ids:
a = soup.find("Cash Dividends Paid - Total", id=id)
csv_news.writerow([a.text])
在前面添加了表格的ID,因此您可以通过传递空的选择器(如
pandas
答案 2 :(得分:0)
在选择器th和td而不是表中保留边界折叠。可以。