85 lines
3.3 KiB
Python
Executable File
85 lines
3.3 KiB
Python
Executable File
import pandas as pd
|
|
from datetime import datetime
|
|
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
|
|
import schedule
|
|
import time
|
|
import utils as Utils
|
|
|
|
# 获取excel文件路径和excel的工作表头
|
|
FILE_PATH = Utils.FILE_PATH
|
|
HEADER = Utils.HEADER
|
|
|
|
# 获取工作表数量以及名称
|
|
sheet_names = Utils.sheet_names
|
|
|
|
|
|
def write_to_excel(results,source=""):
|
|
# 检查文件是否存在,如果不存在则创建一个新的Excel文件
|
|
try:
|
|
df_existing = pd.read_excel(FILE_PATH, sheet_name=None)
|
|
except FileNotFoundError:
|
|
df_existing = {name: pd.DataFrame(columns=HEADER) for name in sheet_names}
|
|
|
|
today_str = datetime.now().strftime('%Y-%m-%d')
|
|
aditional_item=0 # 记录本次爬取新增的公告数量
|
|
# 将爬取的公告对号入座填充至excel文件的工作表中
|
|
for result in results:
|
|
sheet_name = result["来源栏目"] if result["来源栏目"] in sheet_names else "其他"
|
|
df_sheet = df_existing[sheet_name]
|
|
|
|
# 检查是否已存在相同内容链接的记录
|
|
if not df_sheet[df_sheet["内容链接"] == result["内容链接"]].empty:
|
|
continue
|
|
|
|
# 添加新记录
|
|
new_row = pd.DataFrame([result])
|
|
df_sheet = pd.concat([df_sheet, new_row], ignore_index=True)
|
|
aditional_item+=1 # 若有新增公告,则加1
|
|
# 按时间降序排列
|
|
df_sheet.sort_values(by='发布时间', ascending=False, inplace=True)
|
|
|
|
# 更新现有数据
|
|
df_existing[sheet_name] = df_sheet
|
|
|
|
# 写入Excel文件
|
|
with pd.ExcelWriter(FILE_PATH, engine='openpyxl') as writer:
|
|
for sheet_name, df in df_existing.items():
|
|
df.to_excel(writer, sheet_name=sheet_name, index=False)
|
|
|
|
# 获取工作表对象
|
|
worksheet = writer.sheets[sheet_name]
|
|
|
|
# 设置列宽
|
|
for col_idx, column_width in enumerate([40, 15, 20, 30, 20]):
|
|
worksheet.column_dimensions[chr(65 + col_idx)].width = column_width
|
|
|
|
# 创建红色填充
|
|
red_fill = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")
|
|
|
|
# 创建边框样式
|
|
thin_border = Border(left=Side(style='thin'),
|
|
right=Side(style='thin'),
|
|
top=Side(style='thin'),
|
|
bottom=Side(style='thin'))
|
|
|
|
# 应用样式
|
|
for row in worksheet.iter_rows(min_row=1, max_col=len(HEADER), max_row=worksheet.max_row):
|
|
publish_date = row[1].value if len(row) > 1 else None
|
|
# print("这是publish_date",publish_date)
|
|
# 若公告发布日期为今天,则将其单元格背景填充至红色
|
|
if publish_date == today_str:
|
|
for cell in row:
|
|
cell.fill = red_fill
|
|
|
|
for idx, cell in enumerate(row):
|
|
alignment = Alignment(horizontal='left' if idx < 4 else 'general', vertical='top', wrap_text=True)
|
|
cell.alignment = alignment
|
|
cell.border = thin_border
|
|
print(f"<{source}> 新增 {aditional_item} 条公告,已保存至excel文件中")
|
|
|
|
|
|
|
|
|
|
|
|
|