不为无益之事,何遣有涯之生

Python技术栈更新

有段时间没用Python写工程了,基本都是写脚本,最近接了个活帮忙搞个爬虫相关项目,需要更新一下技术栈,做个笔记。

  • web开发:fastapi, 其实还可以接着用flask,不过前者对asyncio支持更完善一些,顺便学一下新东西;至于django还是太重了,写单体估计有点用;
  • 数据库ORM:仍然可以继续使用sqlalchemy,最新的是2.0版本,已经支持asyncio;
  • 爬虫:爬虫相关的技术栈变化不大…scrapy其实不太好用,封装的太厚,而且twisted早就过时了。自己写的话就:
    • aiohttp做网络请求;
    • dom解析:仍然是基于lxml的技术栈,主要还是xpathcss-selector来获取元素;
    • 浏览器模拟(动态网页):Playwright代替了Selenium等古早的框架;
    • 打包:用docker就行;
    • 验证码破解:这个相关的网站蛮多的,但是好不好使需要测试一下才知道。包括:yesCapture, 2Capture和穿云等;
    • 其他反爬技术:这个只能随机应变了,现在很多网站都做了反爬,具体手段不一,需要尝试解决;

FastAPI

fastapi顾名思义,专注于提供API框架,不关心模版引擎、ORM之类的东西,但是自带了API文档(即swagger集成)。所以代码非常简单,不需要Django那套复杂的框架:

Jinja2小结

之前写Python的时候其实有接触过一些jinja2,不过没有怎么用过实际上。毕竟前后端分离之后,这些模板语言在web开发上用处并不大。不过ansible选用了它做渲染模板,所以还是需要深入学习一下。比较蛋疼的是,k8s这边因为都是golang生态,所以用的是go template,那就是另外一套东西了。

Ansible速成

虽然iac(infracture as code)流行以来,新的技术栈层出不穷,但是一般都是面向k8s或者云服务商的。传统的部署还是用ansible这种仅依赖ssh的最简单。

Ytt试用

jsonnet最大的问题其实是:它支持的是json,而不是yaml. 其实这也不是什么问题,因为yaml是json的超集,json本身就是一个合法的yaml. 但是写起来需要将原来的yaml转成jsonnet,输出成yaml就更麻烦,需要在外围加上std.YamlManifest(),这种侵入式的设计感觉很蛋疼。

Jsonnet试用

jsonnet这个语言很有意思,它存在的目的就是为了编辑配置。其实使用任何一门带有字符串模板的语言都能完成类似的目的,但是jsonnet的好处是它的封闭性:不要使用额外的依赖完成配置。

0%