• Madman
  • ·

Python使用logging模块的SMTPHandl...

如果你想使用 Python 的内置模块 logging 中的 SMTPHandler 将出错时的日志,通过邮件的方式发送给管理员的话,可能你会遇到很多坑,本文将解决诸如 socket.timeout: timed out 和 smtplib.SMTPServerDisconnected: Connection unexpectedly closed: timed out 等错误,亲测有效

  • Madman
  • ·

自动生成文章目录TOC与定位导航

要自动生成博客文章的目录 TOC(Table of Contents),可以在后端生成,比如 Markdown 有 TOC 插件。或者使用前端插件,比如 tocify、toc 等,同时前端插件还可以结合 scrollspy 等来实现定位导航,即向下滚动文章内容时,会自动定位到对应的目录项。本文使用前端 JS 生成目录,展示样式美观且能够定位导航,并支持 3 级目录

  • Madman
  • ·

一文搞懂 MongoEngine 的使用

Flask-MongoEngine 是集成了 MongoEngine 的一个 Flask 插件,并且它可以从 MongoEngine 定义的数据模型中快速生成 WTForms。而 MongoEngine 是一个 Document-Object Mapper (非常类似于 ORM),是 Python 语言的、用来操作 MongoDB 数据库的 DOM 架构

Python 3 爬虫-min.png
  • Madman
  • ·

Python 3 爬虫|第11章:爬取海量妹子图

爬取 www.mzitu.com 全站图片,截至目前共 5162 个图集,16.5 万多张美女图片,使用 asyncio 和 aiohttp 实现的异步版本只需要不到 2 小时就能爬取完成。按日期创建图集目录,保存更合理。控制台只显示下载的进度条,详细信息保存在日志文件中。支持异常处理,不会终止爬虫程序。失败的请求,下次再执行爬虫程序时会自动下载

Python 3 爬虫-min.png
  • Madman
  • ·

Python 3 爬虫|第9章:使用 asyncio ...

支持 HTTP 协议的异步网络 I/O 库:aiohttp,我们的爬虫需要使用该库的 Client 功能。需要结合 asyncio 一起使用,经过测试,单线程的异步编程比多线程版本的性能还要好一些,毕竟没有创建线程的开销和线程间上下文切换。另外,如果你下载的是视频等大文件,此时,将网络数据保存到本地磁盘的这个过程,本身是阻塞的,所以它会阻塞事件循环。asyncio 不支持磁盘 I/O...

Python 3 爬虫-min.png
  • Madman
  • ·

Python 3 爬虫|第8章:使用 asyncio 模块实现并发

asyncio 模块于 Python 3.4 添加到标准库中,它在单线程中使用事件循环来驱动协程从而实现并发。对事件循环来说,调用回调与在暂停的协程上调用 .send() 方法效果差不多。各个暂停的协程是要消耗内存,但是比线程消耗的内存数量级小。而且,协程能避免可怕的 "回调地狱"。使用 asyncio 包时,我们编写的协程被包装成 Task...

Python 3 爬虫-min.png
  • Madman
  • ·

Python 3 爬虫|第7章:协程 Coroutines

生成器可以作为协程(coroutine)使用,称为 "基于生成器的协程"。协程和生成器类似,都是定义体中包含 yield 关键字的函数。但它们也有本质区别,生成器用于 "生成" 供迭代的数据,next() 方法只允许调用方从生成器中获取数据; 而协程与迭代无关,协程是数据的消费者,调用方会把数据推送给协程。PEP 342 给生成器增加了 send()...