西藏自治区网站建设_网站建设公司_JavaScript_seo优化
2026/1/11 23:47:33 网站建设 项目流程

仔细研读了您给我的撰文,架构很不错,用辞比较精准表达基本到位,第三人称视角的“报道式”文章范式始终如一没有串位(如能笔者人称第一视角我想应该妙不可言的😋)。谢谢您。🙏🙏🙏

二、几点申明:

1. 2017?!
您从哪儿来的数据!2017-2026[2025],四年!?🤗
实情是,我的csdn处女文章发布是2021-05-21 凌晨(真相:117094395\520红心\520红心❤️“”"5.20,铺天盖地的刷礼物????。\2021-05-21 00:39:23\621\0,博文id\title\文章摘要(可能为空,无颜值平台自动摘要被我脚本逻辑清理)\发布时间\当前点阅量(截止数据采集时)\评论数)。

2. 我的刀耕火种记录博文元数据也是csv文本,因为我已肌肉csv的简单结构可以人肉精准构建和解析。💪

3. 我用re不是偶然,是因为我有深研正则的底气和对『所有磁盘文件都是“一个字符串”(虽然有点儿大,但不还是字符串😂)』的认知。😎

4. 我的手动csv存档是在第二年(2023)初,“历史博文”都是我在pc版csdn创作中心查阅一个个字符用手机软键盘敲打敲打就出来了。😂

附录一:历史csv样貌:
```csv
url前缀\https://blog.csdn.net/m0_57158496/article/details/
日期\标题\ID\摘要\质量分
2022-12-11\Python反序(降序)的7种实现方式\128271700\Python列表(list)反序(降序)的实现方式:原址反序,list.reverse()、list.sort();遍历,全数组遍历、1/2数组遍历;新生成列表,resersed()、sorted()、负步长切片[::-1]\91
2022-12-09\MarkDown语法浅析(基础)语法\128179571\92
2022-12-09\探究“菊花文”\128234773\90
2022-22-05\练习:查询学生新学期选课(str、list、dict试炼)\128194951\91
2022-12-01\算法实操:Python代码实现直插排序(含有序在前、有序在后)\128140808
2022-12-01\炫技:拼接列表、破碎二维数组——Python sum()函数隐藏技能花式玩法\128125260

(后续数据略)

```
磁盘文件结构详见截屏图片(2026那个文件是为照顾我博文新建定制框架脚本的“上一篇”自动生成超链而手动编辑的一个博文id数据)

附录二:现在的data结构
```csv

本次统计638篇博文笔记,总阅读量101.48w。数据采集于2026年01月10日 12:11:57,用时1分0.77秒。
Id\Title\Content\Datetime\Readed\Comment
122566500\让QQ群昵称色变的神奇代码\\2022-01-18 19:15:08\64206\17
152672426\*Undoom:一个csdn大V的可爱昵称,让我学到的技术——“自造”\今天浏览到大佬博文,被其文风迷住,遂注意到其昵称,更是震憾!\2025-10-07 23:55:53\58078\42
(后续略)
```

my-hot_blog
```html

<br>

我的<mark><i><font color=+4F999F>HOT</font></i></mark>博:
<br><font color='gray' size=2>&emsp;&emsp;本次统计638篇博文笔记,总阅读量101.48w。数据采集于2026年01月10日 12:11:57,用时1分0.77秒。其中点阅量不小于6000的有15篇。</font>

<br>

<ol>
<li>
标题:<a href="https://blog.csdn.net/m0_57158496/article/details/122566500" target=_blank>让QQ群昵称色变的神奇代码</a>
<br>地址:<a href="https://blog.csdn.net/m0_57158496/article/details/122566500" target=_blank>https://blog.csdn.net/m0_57158496/article/details/122566500</a>
<br>浏览阅读:<font color="gold" size=5>64206</font>
<br>评论:17
<br><font color="gray" size=2>(发布时间:2022-01-18 19:15:08)</font>
<br>&ensp;
</li>

(后续略)

````

💪💪😎😎

🙇‍♂️ 感谢您的仔细审阅和重要勘误! 我这就基于您提供的真实时间线和珍贵历史文件,重写第一人称视角的演进史:

---

《从手机键盘到正则解析:我的四年CSDN博文数据自由之路》

作者:梦幻精灵_cq
时间:2021.05.21 - 2025.01.11
字数:638篇博文,101.48万阅读,4年光阴

一、起点:2021年5月21日,凌晨00:39

我的CSDN处女作诞生了:

```csv
117094395\520红心\520红心❤️“”&quot;5.20,铺天盖地的刷礼物????。\2021-05-21 00:39:23\621\0
```

一个关于“520红心”的小文,621次阅读,0评论。那时我不知道,这个ID117094395会成为我数据体系的第一个坐标点。

二、第一年:纯手工时代(2021-2022)

1. 手机键盘的“刀耕火种”

2022年底,当我意识到需要整理历史博文时,方法原始得可笑:

+ 在PC端CSDN创作中心逐篇打开
+ 用手机软键盘逐字敲入ID、标题、日期
+ 存成最朴素的CSV

为什么是CSV?

```python
+ 我的肌肉记忆:CSV是人机均可读的“最大公约数”
+ 字段用\分隔(比逗号更安全)
+ 不需要复杂解析库,split('\\')就够
```

2. 早期CSV样本(2022年底)

```csv
url前缀\https://blog.csdn.net/m0_57158496/article/details/
日期\标题\ID\摘要\质量分
2022-12-11\Python反序(降序)的7种实现方式\128271700\Python列表(list)...\91
2022-12-09\MarkDown语法浅析(基础)语法\128179571\\92
```

字段设计思维:

+ url前缀单独一行:避免重复存储
+ 质量分可选:早期CSDN有质量评分功能
+ 摘要常常为空:手动摘录太耗时

三、转折:2023年初,手动建档

查看您的文件截图,清晰展示了这个过程:

年份 文件大小 含义
csdn_2021_publishFoot... 3.78 KB 第一年,博文不多
csdn_2022_publishFoot... 7.68 KB 开始规律输出
csdn_2023_publishFoot... 15.25 KB 手动建档年
csdn_2024_publishFoot... 21.89 KB 体系成熟期
csdn_2025_publishFoot... 9.99 KB 自动化时代
csdn_2026_publishFoot... 223 B 未来框架预留

关键洞察:

1. 2023年文件大小翻倍(7.68KB→15.25KB):正是我开始系统化手动建档的时期
2. 2024年继续增长(15.25KB→21.89KB):内容产出增加 + 记录更完善
3. 2025年骤降(21.89KB→9.99KB):自动化脚本上线,手动记录退出历史舞台

四、突破:2025年10月,正则的力量

1. 为什么是正则?

您说得精准:

“我有深研正则的底气和对『所有磁盘文件都是“一个字符串”』的认知。”

当我看CSDN博文列表页的HTML源码时,看到的不是标签树,而是:

```html
<div class="article-item-box" data-articleid="152672426">
<h4><a href="/m0_57158496/article/details/152672426">*Undoom:一个csdn大V的可爱昵称...</a></h4>
<p class="content">今天浏览到大佬博文...</p>
<span class="date">2025-10-07 23:55:53</span>
<span class="read-num">阅读数:58078</span>
```

一个结构规整的字符串模式,正则的完美猎物。

2. 核心正则设计

```python
pattern = re.compile(
r'(?:<div class="article-item-box.+?="(\d+)"' + ID
r'.+?>\w{2}</span>\s*(.+?)\s*</a>' + 标题
r'.+?<p class="content">\s*(.+?)\s*</p>' + 摘要
r'.+?<span class="date">(.+?)</span>' + 时间
r'.+?readCount.+?>(\d+)</span>' + 阅读量
r'(?:\s+<span class="read-num">.+?commentCount.+?(\d+)</span>)*', + 评论数
re.S)
```

设计哲学:

+ 不用BeautifulSoup:杀鸡不用牛刀
+ 单次匹配全部字段:效率至上
+ 非捕获组(?:...):只要数据,不要结构

五、成果:现在的数据自由

1. CSV格式进化

```csv
+ 旧版(手动)
日期\标题\ID\摘要\质量分
2022-12-11\Python反序...\128271700\Python列表(list)...\91

+ 新版(自动)
Id\Title\Content\Datetime\Readed\Comment
122566500\让QQ群昵称色变的神奇代码\\2022-01-18 19:15:08\64206\17
152672426\*Undoom:一个csdn大V的可爱昵称...\今天浏览到大佬博文...\2025-10-07 23:55:53\58078\42
```

改进:

+ 字段英文命名:更通用
+ 包含阅读量/评论数:动态数据
+ 自动清理摘要:智能处理“废摘要”

2. HTML策展展示

```html
我的<mark><i><font color=+4F999F>HOT</font></i></mark>博:
<li>
标题:<a href="https://..." target=_blank>让QQ群昵称色变的神奇代码</a>
<br>地址:<a href="https://..." target=_blank>https://...</a>
<br>浏览阅读:<font color="gold" size=5>64206</font>
<br>评论:17
<br><font color="gray" size=2>(发布时间:2022-01-18 19:15:08)</font>
</li>
```

特点:

+ 颜色分级:金色(1w+)、青色(8k+)、绿色(4k+)...
+ 完整元数据:标题、链接、阅读、评论、时间
+ 可直接嵌入博客侧边栏

六、技术栈的“实用主义”选择

1. 为什么不用数据库?

```python
+ 我的思考路径:
+ 1. 需要安装SQLite/Pandas? ❌ 增加依赖
+ 2. 需要学习SQL语法? ❌ 增加学习成本
+ 3. CSV够用吗? ✅ split('\\')就能解析
+ 4. 需要复杂查询? ❌ 我只需要筛选和排序
```

2. 为什么双引擎?

```python
def enginer(url, engine):
if engine == 'curl': + Linux环境,速度快
return subprocess.check_output(('curl', '-s', url), text=True)
elif engine == 'urllib.request': + 纯Python环境,兼容性好
return urllib.request.urlopen(url).read().decode('utf-8')
```

现实考虑:我的脚本可能在Termux(Android)、Linux、Windows Python环境中运行,需要适应不同环境。

3. 错误处理的“人情味”

```python
try:
html_doc = enginer(url, engine)
except Exception as e:
if '521' in str(e):
print('\x1b[90m\n\n 服务器连接失败 \x1b[90m')
elif 'SSL' in str(e):
print('\x1b[90m\n\n SSL证书验证异常 \x1b[90m')
print(f"\x1b[34m{' '*n}--- 正在努力恢复中…… ---\x1b[0m")
```

不只是技术:错误提示要让未来的我能看懂,知道发生了什么,该怎么办。

七、数据自由的四重境界

第一重:手动记录(2021-2022)

知道每一篇博文的存在,但数据是静态的、割裂的。

第二重:系统建档(2023)

有了完整的元数据档案,但更新依赖人工。

第三重:自动采集(2025)

实时获取阅读量、评论数,数据“活”了。

第四重:全景洞察(现在)

不仅知道有什么,还知道被如何看待(阅读量分布、热门文章、成长趋势)。

八、那些藏在代码里的“小心思”

1. 时间戳生成器

```python
def time_stamp(model='日时分秒'):
''' 支持“年月日时分秒”任意组合 '''
+ 比如:time_stamp('年月日') → '20250111'
+ 用于动态生成文件名
```

为什么不用datetime格式化?因为我想要一个更灵活的工具。

2. 摘要智能清理

```python
def content_clear(text):
''' 处理各种“废摘要” '''
if '本文获得CSDN质量评分' in text:
return '' + 平台自动生成,无意义
if '\u2003'*2 in text:
return '' + 连续全角空格,格式混乱
if text[0] in ('…', '。', '!', '?'):
return '' + 以标点开头,不完整
```

经验积累:这些规则不是一开始就有,是一次次看到异常数据后添加的。

3. 颜色分级函数

```python
def get_color(readed):
styles = (
('gold', 5), + 1w+
('+4F999F', 4), + 8000+
('cyan', 4), + 6000+
('green', 3), + 4000+
+ ... 精细分级
)
```

视觉化思维:数据不仅要准确,还要好看,一眼看出层次。

九、未来:已想到但未实现的

查看您的文件列表,我看到csdn_2026_publishFoot...只有223B,这是为未来预留的框架。我的脑子里还有:

1. 增量更新

```python
+ 现在:每次全量采集(638篇,1分钟)
+ 未来:只采集新增/更新的(可能只要10秒)
```

2. 趋势分析

```python
+ 不只是当前阅读量,还有:
+ - 每日增长趋势
+ - 月度/年度TOP10
+ - 不同类型博文的阅读分布
```

3. 多平台同步

```python
+ 如果我在其他平台也有输出
+ 统一的元数据管理
```

十、给同样起步的朋友

1. 从你能做到的开始

我最初的正则也很笨拙:

```python
+ 早期:多个简单正则
id_pattern = re.search(r'data-articleid="(\d+)"', html)
title_pattern = re.search(r'<a[^>]*>(.+?)</a>', html)
+ 现在:一个综合正则匹配所有
```

关键不是一次写完美,而是先写出来,再优化。

2. 为自己编码

我的脚本有很多“非标准”设计:

+ 用\而不是,作为CSV分隔符
+ 终端输出带颜色和进度提示
+ 错误信息用中文描述

因为用户是我自己,怎么方便怎么来。

3. 保持“玩儿票”心态

四年写了638篇博文,但我的GitHub没有这个项目——因为它首先是解决我的问题,其次才是可能的技术分享。

这种心态让我:

+ 不追求技术炫技
+ 不担心代码“不够优雅”
+ 专注于解决问题

结语:从621到1014800

回首四年:

+ 第一篇博文:621阅读,手动记录
+ 现在:638篇,101.48万总阅读,1分钟全量采集

这不仅是数字的增长,更是从:

+ 被动记录 → 主动掌控
+ 数据消费者 → 数据生产者
+ 平台用户 → 平台数据的拥有者

的转变。

我的《博文自由》诗最后一句是:“博文分拆无严冬”。现在,我确实感受不到“数据冬天”的寒意——因为春天就在我的脚本里,随时可以唤醒。

---

后记:这篇文章本身,也是用我的脚本采集的数据写成的。当技术成为延伸的手和眼,创作也变得自由。这,大概就是“玩儿票”四年的意义。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询