Python自動提取生成部落格園年度報告

2022-02-12 10:03:06 字數 4797 閱讀 1045

hi 小狼的世界 你在已經發表了373篇文章

2023年你一共寫了24篇文章

yui學習筆記 – css rest、base、font以及grid是你在02:03寫下的,夜已深注意休息

只需要本機安裝了python環境就可以執行,如果沒有python環境也沒關係,裝上docker幫你快速搭建開發環境,可以參考我的 利用docker快速構建開發環境

import os, sys, getopt

import re

import requests

import json

from bs4 import beautifulsoup

class generate():

blog_title = ''

def __init__(self, blog_url, year = 2020):

self.blog_url = blog_url

self.year = year

# 從列表頁獲取所有文章相關資訊

def _get_post_lists(self):

blog_data =

html = requests.get(self.blog_url).text

soup = beautifulsoup(html, 'html.parser')

self.blog_title = soup.find('a', attrs=).text.strip()

next_page = soup.find('div', attrs=)

next_page_link = next_page.a['href']

# 儲存本頁的文章資訊

blog_data += soup.find_all('div', attrs=)

while true:

next_html = requests.get(next_page_link).text

next_soup = beautifulsoup(next_html, 'html.parser')

blog_data += next_soup.find_all('div', attrs=)

next_pager = next_soup.find('div', attrs=)

next_page_link = next_pager.find_all('a')[-1]['href']

else:

break

return blog_data

# 將抓取的資料準備統計所需的格式

def _prepare_data(self, blog_data):

stat_data =

post_data = {}

for item in blog_data:

# print(item)

post_data['post_title'] = item.find('div', attrs=).text.strip()

# post_data['post_desc'] = item.find('div', attrs=).text.strip()

post_data['post_date'] = re.search(r'\d-\d-\d', item.find('div', attrs=).contents[0]).group()

post_data['post_time'] = re.search(r'\d:\d', item.find('div', attrs=).contents[0]).group()

post_data['view_count'] = int(re.search(r'\d+', item.find('span', attrs=).text.strip()).group())

post_data['digg_count'] = int(re.search(r'\d+', item.find('span', attrs=).text.strip()).group())

post_data['comment_count'] = int(re.search(r'\d+', item.find('span', attrs=).text.strip()).group())

post_data = {}

return stat_data

# 計算統計指標

# 報告的指標

# * 文章總數量

# * 文章閱讀總量

# * 最高閱讀量

# * 推薦總量

# * 最晚發文的時間與文章名稱

def _calc_stat(self, blog_data):

stat_data = {}

stat_data['total_post'] = len(blog_data)

stat_data['year_post'] = 0

stat_data['total_view'] = 0

stat_data['total_comment'] = 0

stat_data['total_digg'] = 0

stat_data['max_view'] =

stat_data['max_comment'] =

stat_data['max_digg'] =

# stat_data['early_post'] = {}

stat_data['late_post'] =

for item in blog_data:

stat_data['total_view'] += item['view_count']

stat_data['total_comment'] += item['comment_count']

stat_data['total_digg'] += item['digg_count']

if item['view_count'] > stat_data['max_view']['view_count']:

stat_data['max_view']['view_count'] = item['view_count']

stat_data['max_view']['post_title'] = item['post_title']

if item['comment_count'] > stat_data['max_comment']['comment_count']:

stat_data['max_comment']['comment_count'] = item['comment_count']

stat_data['max_comment']['post_title'] = item['post_title']

if item['digg_count'] > stat_data['max_digg']['digg_count']:

stat_data['max_digg']['digg_count'] = item['digg_count']

stat_data['max_digg']['post_title'] = item['post_title']

if item['post_date'] > '2019-12-31':

stat_data['year_post'] += 1

# 只考慮了0點以後發文的問題

if item['post_time'] < '05:00' and item['post_time'] > stat_data['late_post']['post_time']:

stat_data['late_post']['post_time'] = item['post_time']

stat_data['late_post']['post_title'] = item['post_title']

return stat_data

def _render_md(self, stat_data):

md_string = "## " + self.blog_title + " 的年度報告\n"

md_string += "hi " + self.blog_title + ' '

md_string += "你在已經發表了**" + str(stat_data['total_post']) + "**篇文章\n"

md_string += "2023年你一共寫了**" + str(stat_data['year_post']) + "**篇文章\n"

md_string += "\n"

md_string += "\n"

md_string += "你閱讀量最高的一篇文章是 **" + stat_data['max_view']['post_title'] + "**,共有 **" + str(stat_data['max_view']['view_count']) + "** 次閱讀\n"

md_string += "\n"

md_string += "**" + stat_data['late_post']['post_title'] + "** 是你在 **" + stat_data['late_post']['post_time'] + "** 寫下的,夜已深注意休息\n"

md_string += "\n"

return md_string

def run(self):

blog_data = self._get_post_lists()

blog_data = self._prepare_data(blog_data)

stat_data = self._calc_stat(blog_data)

print(self._render_md(stat_data))

pass

部落格園備份提取

在記錄了一些文章,想把它備份到github上,還好大部分博文都是markdown格式的,也支援備份匯出,但是到處的是單個的xml檔案。為了把每一篇博文單獨提取出來,所以寫了乙個小程式來提取。github中需要如下圖所示的格式,方能正確的分類 檔名需要日期開頭,檔案內容中最前面一段是文章的一些描述資訊...

python部落格園 python 模擬部落格園系統

作業 用 模擬系統。專案分析 一 首先程式啟動,頁面顯示下面5內容供使用者選擇 1.請登入 2.請註冊 3.進入文章頁面 5.進入日記頁面 6.進入收藏頁面 7.登出賬號 8.退出整個程式 二 必須實現的功能 1.註冊功能要求 a.使用者名稱 密碼要記錄在檔案中。b.使用者名稱要求 只能含有字母或者...

部落格園部落格自動生成目錄 目錄索引

回到頂部 近來寫了一些比較長的部落格,閱讀起來很不方便,看園子裡其他園友的部落格有些有目錄,就想給自己的部落格增加目錄結構,增加文章可讀性 回到頂部 回到頂部 通過點選目錄索引,跳轉到對應的章節,並可回到目錄頂端 回到頂部 回到頂部 確保自己的後台支援js 這個預設是不支援,需要向官方申請,在部落格...