#爬虫#csdn博客info分析#自动化#pathon
双模数据集采忙,蛋无独篮性能强。
笔记模板由python脚本于2025-12-17 12:38:46创建,本篇笔记适合希望有效方便地查阅自己csdinfo的coder翻阅。
博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述。
Python官网:
这里,才python前沿。英文原版,原汁原味,才是寻根溯源的正统。😎
地址:https://www.python.org/Free:
大咖免费“圣级”秘笈《 python 完全自学教程》不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间,总是比在学校学习的时间长;没有老师的时候总是比有老师的时候多。
——华罗庚
您,可以在评论区书写任何想法 (我将在看到的第一时间回应)
(如果有说法,大胆@我)
本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/156011609
CSDN质量分查询入口:http://www.csdn.net/qc
目 录
- ◆ “混动”引擎
- ※ 本文缘起
- 1、
- 2、
- 3、
- 4、
- 5、
- 6、
- 7、
- 8、
- ※ myHotBlog
◆ “混动”引擎
《“混动”引擎》
当代·梦幻精灵_cq
双模数据集采忙,
蛋无独篮性能强。
数据即时完整拉,
文本表格轻量仓。
心想列项键盘敲,
素存备粮不心慌。
必要行列队队齐,
几行代码点江山。
※ 本文缘起
代码效果截屏一
代码效果截屏二
脚本代码摘录:
defsorter(blog_list:list|tuple,# 待排序的二维数据key=lambdax:x[-2],# 点阅量为排序对象):''' 二维list排序 '''blog_list=([value.replace('\\','\u0092')# id/title/datetime,即index in (0, 1, 3)及不比标题长的content只置换反斜杠字符为“\u0092”ifindexin(0,1,3)else(int(value)ifvalue.isdigit()else0# 如空字符串'',置0)if4<=index<=5# 转int逻辑只针对点阅量、评论数elsecontent_clear(value.replace('\\','\u0092'))# 先置换字符串中的反斜杠再清理iflen(value)>len(blog_info[1])# 智能清理比标题长度contentelse''if('\u2003'*2invalue# 舍弃含连续三个全角空格的contentorvalueinblog_info[1]# 舍弃content是title子串)elsevalue.replace('\\','\u0092')# 此为永远到不了的分支(前面逻辑已全覆盖),仅仅为完备三元语法结构forindex,valueinenumerate(blog_info)# 遍历博文readed等数据]forblog_infoinblog_list# 遍历搜集到的博文id)strdata=map(str,(blog_list:=list(blog_list)))# map字符化数据input(f"{color(94)}"# 设定亮青色域f"{'\n'.join(strdata)}"# 折行粗暴格式化数据f"{color(34)}"# 设定暗系蓝色域f"\n\n{f' 采集到{len(blog_list)}个id-info ':-^{width-4}}"f"{color()}"# 设定亮黑色域(灰)f"\n\n{' 原始数据展示 ':=^{width-6}}"f"\n{'【任意键继续……】':^{width-7}}"f"{color(0)}"# 恢复系统配色)returnsorted(blog_list,# 待排序列表key=key,# 排序规则reverse=True# 倒序)# 阅读量逆序defget_readed(url_prefix:str='https://blog.csdn.net/m0_57158496/article/list/',# 博文list页面地址前缀max_second:int=3,# 最大延迟s数max_retry:int=3,# 最大retry次数engine:str='curl',# 我此函数预设双引擎max_retry_second:int=30,# 错误重试最大s数total:int=get_blog_total(),# 缺省“我”梦幻精灵_cq博客总数):''' csdn博文list数据扒取 '''fromrandomimportrandintfromtimeimportsleep,time,strftime start=time()patterner=readed_patterner()blog_list=[]n=1# blog_list第一页编码print()whileTrue:print(' '*width,end='\r')# 黑板擦print(f"{' '*randint(0,width-34)}{f'--- 正在提取第{n:02d}页list博文ID…… ---'}",end='\r')m=1get_start=time()whileminrange(max_retry+1):url=f"{url_prefix}{n}"# 动态生成博文地址(url)try:html_doc=enginer(url,# 页面地址engine# get-url引擎)# get-url引擎调用exceptExceptionase:if'521'instr(e):print(f"\x1b[90m\n\n{(tip:='\x1b[37;2m 服务器连接失败 \x1b[90m'):-^{width+len(tip)-16}}\n"f"\x1b[90m解释器错误信息:\x1b[31m{e}\x1b[0m")elif('SSL'instr(e)# python内库urllib.request异常or'exit status 35'instr(e)# 35,Linux ssl握手失败状态码):print(f"\x1b[90m\n\n{(tip:='\x1b[37;2m SSL证书验证异常 \x1b[90m'):-^{width+len(tip)-17}}\n"f"\x1b[90m解释器错误信息:\n\x1b[31m{e}\x1b[0m")else:print(f"\x1b[90m\n\n{(tip:='\x1b[37;2m 其它异常 \x1b[90m'):-^{width+len(tip)-10}}\n"f"\n\x1b[90m解释器错误信息:\n{f'\x1b[31m{e}\x1b[90m':-^{width+10}}\n"# 错误信息打印)print(f"\x1b[34m{' '*randint(0,width-24)}{f'--- 正在努力恢复中…… ---'}\x1b[0m",end='\r')sleep(0.2)# 延迟0.2siftime()-get_start>max_retry_second:# retry最大s数判定raiseValueError('脚本运行超时')else:continue# 重启第二轮retry循环if(blog_info:=patterner.findall(html_doc)):blog_list.extend(blog_info)breakelse:print(' '*width,end='\r')# 黑板擦print(f"{' '*randint(0,width-28)}{f'--- 正在第{m:02d}次尝试联接…… ---'}",end='\r')sleep(randint(1,max_second))# 随机1-3s延迟m+=1# 重试次数自增continue# 重试n+=1# blog_list页码后移一页ifnotblog_info:break# 匹配data为空退出博文id收集循环(说明:blog_list页码不存在,csdn不会return 404,它有真实页面返回,只是没有blog_list数据)else:sleep(randint(1,max_second))# 随机1-3s延迟print(' '*width,end='\r')# 黑板擦if((local_total:=len(blog_list))<total):raiseValueError('\x1b[90m'# 亮灰字f"\n\n{(f'\x1b[36m 本应有{total}条记录 \x1b[90m'):-^{width-6+10}}\n"f"\n{(f'【实际收集{local_total}】\x1b[90m'):^{width+5-6}}"f"\n\n{(' \x1b[36m残缺数据不作记录\x1b[90m '):-^{width+10-8}}"'\x1b[0m\n\n'# 恢复系统配色)total_second=time()-startreturn((blog_list:=sorter(blog_list)# 返回点阅量降序列表),(f"本次统计{len(blog_list)}篇博文笔记,"f"总阅读量{sum(blog[-2]forbloginblog_list)/10**4:.2f}w。"f"数据采集于{strftime('%Y年%m月%d日 %H:%M:%S')},"f"用时{f'{total_second//60:.0f}分'iftotal_second>60else''}{total_second%60:.2f}秒。"),# 数据采集元信息生成)梦幻精灵_cq:我的这两个模块(函数)(工程脚本摘录)设计还算可以吧。😋
DeepSeek:
您的这两个函数设计得相当专业和健壮,尤其是在错误处理、数据清洗、网络请求容错和用户交互方面做得非常出色。以下是对您代码设计的详细评价:
✅ 优点亮点
- 健壮的错误处理机制
· 对 SSL、521 等网络异常做了分类处理,并给出了明确的用户提示。
· 设置了 max_retry 和 max_retry_second,避免了无限重试或卡死。
· 在获取到空数据时能及时跳出循环,避免死循环。 - 灵活的数据清洗策略
· sorter 函数不仅排序,还做了结构化清洗,如:
· 转义反斜杠
· 智能判断内容是否有效(如剔除标题子串、全角空格等)
· 类型转换(阅读量、评论数转为 int) - 友好的用户交互与输出
· 使用了进度提示、随机位置打印、颜色控制等,提升用户体验。
· 输出格式整齐,包含统计信息和采集时间,便于日志记录。 - 模块化与可配置性高
· 函数参数设计灵活,如 key 可自定义排序字段、engine 可切换请求引擎。
· 使用 lambda 默认值,保持灵活性。 - 性能与资源控制
· 使用 map、生成器表达式等惰性计算,节省内存。
· 设置随机延迟,避免请求过于频繁被反爬。
⚠️ 可优化建议
- sorter 函数命名可能引起误解
该函数不仅排序,还做了大量数据清洗工作。建议拆分为两个函数:defclean_blog_data(blog_list):...# 数据清洗defsort_blog_data(blog_list,key):...# 排序 - 部分逻辑稍显复杂,可读性略低
例如 sorter 中的三元嵌套逻辑较长,可考虑拆分为辅助函数或使用 match-case(Python 3.10+)。 - 异常提示信息中颜色码硬编码
虽然视觉效果好,但若在无 ANSI 支持的环境运行可能显示乱码。可考虑封装一个颜色工具函数,支持环境检测。 - blog_list 变量在多个地方重复赋值
虽然功能正常,但多次 := 赋值可能让代码流难以追踪,建议保持变量不变性。 - 缺少类型注解完整覆盖
如 sorter 返回类型、get_readed 返回的元组结构可进一步标注,提升 IDE 提示。
🎯 总体评价
这是一个工业级、生产可用的爬虫+数据处理模块,尤其适合个人博客数据统计与分析。代码体现出您对 Python 高级特性、网络请求、字符串处理、用户交互 的熟练掌握。它不仅功能完整,还在容错性、可维护性、用户体验方面做了很多细节优化。
如果您是用于个人博客数据监控或小型数据采集项目,这套代码已经足够优秀。若希望进一步扩展,可考虑:
· 添加异步请求支持(aiohttp)
· 集成数据库存储(如 SQLite)
· 配置化(如将 URL、颜色、路径等提取为配置文件)
总结: 这是一段高质量、实用且富有设计感的 Python 代码,体现出您扎实的编程功底和工程化思维。值得点赞! 👍
1、
梦幻精灵_cq:
DeepSeek:
2、
梦幻精灵_cq:
DeepSeek:
3、
梦幻精灵_cq:
DeepSeek:
4、
梦幻精灵_cq:
DeepSeek:
5、
梦幻精灵_cq:
DeepSeek:
6、
梦幻精灵_cq:
DeepSeek:
7、
梦幻精灵_cq:
DeepSeek:
8、
梦幻精灵_cq:
DeepSeek:
- ◆ “混动”引擎
- ※ 本文缘起
- 1、
- 2、
- 3、
- 4、
- 5、
- 6、
- 7、
- 8、
- ※ myHotBlog
★★★★★★★★★★★★★★★★★★
谢谢您能看到这行文字🙏,表明了您对我的支持。
如有必要,您请顺手“点赞[收藏[评论]]”(向平台算法举荐),让更多同好看见。
★★★★★★★★★★★★★★★★★★
上一篇:
三元诗赏(Python)——DeepSeek对我两首小诗的解读和同情(24)
※ myHotBlog
我的HOT博:
本次统计622篇博文笔记,总阅读量99.44w。数据采集于2025年12月17日 06:33:50,用时1分2.45秒。其中点阅量不小于6000的有14篇。
- 标题:让QQ群昵称色变的神奇代码
地址:https://blog.csdn.net/m0_57158496/article/details/122566500
浏览阅读:64110
评论:17
(发布时间:2022-01-18 19:15:08) - 标题:*Undoom:一个csdn大V的可爱昵称,让我学到的技术——“自造”
摘要:今天浏览到大佬博文,被其文风迷住,遂注意到其昵称,更是震憾!
地址:https://blog.csdn.net/m0_57158496/article/details/152672426
浏览阅读:58040
评论:42
(发布时间:2025-10-07 23:55:53) - 标题:Python列表(list)反序(降序)的7种实现方式
地址:https://blog.csdn.net/m0_57158496/article/details/128271700
浏览阅读:14660
评论:9
(发布时间:2022-12-11 23:54:15) - 标题:个人信息提取(字符串)
地址:https://blog.csdn.net/m0_57158496/article/details/124244618
浏览阅读:10805
(发布时间:2022-04-18 11:07:12) - 标题:pandas 数据类型之 DataFrame
地址:https://blog.csdn.net/m0_57158496/article/details/124525814
浏览阅读:10636
(发布时间:2022-05-01 13:20:17) - 标题:统计字符串字符出现的次数
地址:https://blog.csdn.net/m0_57158496/article/details/130517025
浏览阅读:8985
(发布时间:2023-05-06 22:28:18) - 标题:罗马数字转换器|罗马数字生成器
地址:https://blog.csdn.net/m0_57158496/article/details/122592047
浏览阅读:8790
(发布时间:2022-01-19 23:26:42) - 标题:Python字符串居中显示
地址:https://blog.csdn.net/m0_57158496/article/details/122163023
浏览阅读:8395
评论:1
(发布时间:2021-12-26 23:35:29) - 标题:回车符、换行符和回车换行符
地址:https://blog.csdn.net/m0_57158496/article/details/123109488
浏览阅读:7178
(发布时间:2022-02-24 13:10:02) - 标题:python清屏
地址:https://blog.csdn.net/m0_57158496/article/details/120762101
浏览阅读:6514
(发布时间:2021-10-14 13:47:21) - 标题:我的 Python.color() (Python 色彩打印控制)
地址:https://blog.csdn.net/m0_57158496/article/details/123194259
浏览阅读:6453
(发布时间:2022-02-28 22:46:21) - 标题:练习:尼姆游戏(聪明版/傻瓜式•人机对战)
地址:https://blog.csdn.net/m0_57158496/article/details/121645399
浏览阅读:6196
评论:6
(发布时间:2021-11-30 23:43:17) - 标题:斐波那契数列的递归实现和for实现
地址:https://blog.csdn.net/m0_57158496/article/details/122355295
浏览阅读:6140
评论:8
(发布时间:2022-01-06 23:27:40) - 标题:Python 续行符(反斜杠)“拯救”你的超长语句
摘要:Python 换行符(’)“拯救”你的超长语句
地址:https://blog.csdn.net/m0_57158496/article/details/122878447
浏览阅读:6048
(发布时间:2022-02-11 13:24:16)
截屏图片
(此文涉及ChatPT,曾被csdn多次下架,前几日又因新 发笔记被误杀而落马。躺“未过审”还不如回收站 ,回收站还不如永久不见。😪值此年底清扫,果 断移除。留此截图,以识“曾经”。2023-12-31)
精品文章:
- 好 文力荐:齐伟书稿《python 完全自学教程》Free连载(已完稿并集结成书,还有PDF版本百度网盘永 久分享,点击跳转免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置 对象理解python
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
◆ Python 入门指南【Python 3.6.3】
好文力 荐:
- 全栈领域优质创作者——[寒 佬]博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函 数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代 码编写规范
- Python的docstring规范(说明文档的规范写法)