自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 自学入门 Python 优质中文资源索引

所有资源基于 Python3 版本,全部中文内容,适用于 爬虫 / Web / 数据 方向,每个单元根据学习习惯从 书籍 / 文档 / 视频 中选择一类即可,建议任选一本书籍,然后配合文档类进行学习。资源遵守“宁缺毋滥”的原则,均经过网评筛选或个人亲测,不推荐各类低质量大杂烩的文章书籍,力求少走弯路。通过本文链接资源坚持学习,可真正的零基础自学入门 Python ,实测已帮助两位零编程基础的朋...

2019-03-01 11:23:06 946

原创 认识 WebAssembly

起源WebAssembly 起源于 Mozilla 员工的一个业余项目。2010年,在 Mozilla 从事 Android Firefox 开发的 Alon Zakai,为了把他以前开发的游戏引擎移植到浏览器上运行,利用业余时间开发了一款名叫 Emscripten 的编译器,可以把 C++ 代码通过 LLVM IR 编译成 JavaScript 代码。到了 2011 年底,Emscripten 甚至能够成功编译 Python 和 Doom 等大型 C++ 项目,Mozilla 此时觉得这个项目很有前途

2022-02-26 17:01:20 1187

原创 认识 LLVM

简介LLVM是一套提供编译器基础设施的开源项目,是用 C++ 编写,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期、链接时期、执行时期以及“闲置时期”的优化。LLVM的命名源自于底层虚拟机(Low Level Virtual Machine)的首字母缩写,导致不了解它的人以为它是类似于 JVM(Java Virtual Machine) 的虚拟机,实际上这个项目的范围并不局限于创建一个虚拟机,而是包括 LLVM 中介码(L

2022-02-26 16:59:42 965

原创 Crawlab Lite 正式发布,更轻量的爬虫管理平台

Crawlab 是一款基于 Golang 的分布式爬虫管理平台,产品发布已经一年有余,经过开发团队的不断打磨,即将迭代到 v0.5 版本。在这期间我们为 Crawlab 加入了大量社区用户共同期望的功能,使产品更加专业。但与此同时我们也注意到,部分用户并不是分布式爬虫用户,他们更多只是在单机情况下使用 Crawlab。其次目前 Crawlab 逐步加入了丰富的功能,也使整个产品逐渐巨化,大部分用户并不能充分使用所有的功能。因此 Crawlab Lite 作为 Crawlab 的轻量化版本正式发布,相较于

2020-07-15 20:45:50 824

原创 一款被大厂选用的 Hexo 博客主题

首先这是一篇自吹自擂的文章,主题是由多位非前端程序员共同开发,目前经过一年半的迭代已经到达 v1.8.0 版本,并且获得大量认可,甚至某大厂员工已经选用作为内部博客,因此我决定写这篇文章向更多人安利它。什么是 Hexo ?Hexo 是一个快速、简洁且高效的博客框架,基于 Node.js 开发。Hexo 使用 Markdown 解析文章,并生成静态页面,非常便于静态部署和加载,许多人把页面存...

2020-05-01 18:00:43 753

原创 源码解读 Golang 的 sync.Map 实现原理

简介Go 的内建 map 是不支持并发写操作的,原因是 map 写操作不是并发安全的,当你尝试多个 Goroutine 操作同一个 map,会产生报错:fatal error: concurrent map writes。因此官方另外引入了 sync.Map 来满足并发编程中的应用。sync.Map 的实现原理可概括为:通过 read 和 dirty 两个字段将读写分离,读的数据存在只读...

2020-03-23 13:05:35 604

原创 青蛙跳台阶 Golang 与 Python 最简解法

「剑指Offer」里的经典题目,近期群里聊到这题,特来复习一波。题目一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。思路首先跳到 n 级台阶可以分解为两种情况:之前跳到 n-1 级台阶,然后再跳 1 级到达 n 级;之前跳到 n-2 级台阶,然后再跳 2 级到达 n 级;因此 n 级跳法数量,等于这两种情况之和。即 ...

2020-03-09 00:45:05 212

原创 探究 Go 语言 defer 语句的三种机制

Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理?这是因为这两个版本对 defer 各加入了一项新的机制,使得 defer 语句在编译时,编译器会根据不同版本与情况,对每个 defer 选择不同的机制,以更轻量的方式运行调用。堆上分配在 Golang 1.13 之前的版本中,所...

2020-03-01 13:33:28 214

原创 一道快速考察 Python 基础的面试题

这是前一阵子群友发在群里的一道面试题,利用 Python 字典的特性,可以巧妙地使用精简代码达成完美解。题目将 data 转换成 new_data 这种形式,写出转换过程。data = { 'a_b_h':1, 'a_b_i':2, 'a_c_j':3, 'a_d':4, 'a_c_k':5, 'a_e':6}new_data = {...

2020-02-08 12:29:18 1900

原创 编写自己的 GitHub Action,体验自动化部署

本文将介绍如何使用 GitHub Actions 部署前端静态页面,以及如何自己创建一个 Docker 容器 Action。简介 ActionsGitHub Actions 是 GitHub 官方推出的持续集成/部署模块服务(CI/CD),和 jenkins、Travis CI 是同一类产品定位。但 Actions 的最大优势,就是它是与 GitHub 高度整合的,只需一个配置文件即可自...

2020-01-20 12:52:58 4230 1

原创 Python 2 与 3 共存了 11 年,新年就要和它道别

在 Python 3.9 都已经进入 dev 版本的 2020 年,Python 2 终于要和我们告别了。2 and 3Python 2 第一个版本发布于 2000 年 10 月 16 日,到今年正好是第 20 个年头。而 Python 3 发布于 2008 年 12 月 3 日,但由于 3.0 版本在底层进行了大量重构(主要是 Unicode 与 C API 的改动),无法完整兼容 Py...

2019-12-31 16:51:32 2747

原创 30 年前的圣诞节,Python 序章被谱写

1989 年圣诞节期间,已经从阿姆斯特丹大学(University of Amsterdam)获得数学和计算机硕士学位的 Guido van Rossum,为了打发圣诞节的无趣,决心开发一个新语言解释器,作为 ABC 语言的一种继承。之所以选中 Python(蟒蛇)作为该编程语言的名字,是取自英国 20世纪 70 年代首播的电视喜剧《蒙提.派森的飞行马戏团》(Monty Python’s Fl...

2019-12-24 23:27:46 3076 1

原创 文言文编程火了,可我完全学不懂

毕竟有易语言在前,有人认为中文可以降低国人学习编程的门槛,也增强汉语的国际地位。然而最近大火的文言文编程语言,让你明白什么叫“中文比英语还难”。Hello wenyan最近有个 GitHub 项目火了 —— 文言编程语言 / wenyan-lang。现在这个项目已经超过 10K Stars 了(昨天看还是 9K,一夜涨了 1K),咱赶紧来研究下。学语言嘛,当然先从 “Hello wo...

2019-12-21 18:09:28 23763 50

原创 通过 Python 理解 Mixin 概念

Mixin 的概念Mixin 即 Mix-in,常被译为“混入”,是一种编程模式,在 Python 等面向对象语言中,通常它是实现了某种功能单元的类,用于被其他子类继承,将功能组合到子类中。利用 Python 的多重继承,子类可以继承不同功能的 Mixin 类,按需动态组合使用。当多个类都实现了同一种功能时,这时应该考虑将该功能抽离成 Mixin 类。举个例子定义一个简单的类:clas...

2019-12-04 17:51:28 3113

原创 Node.js 使用 express-jwt 解析 JWT

Node.js 上 Token 鉴权常用的是 passport,它可以自定义校验策略,但如果你是用 express 框架,又只是解析 JWT 这种简单需求,可以尝试下 express-jwt 这个中间件。关于 JWTJWT 全称 JSON Web Token,是代替传统 session 认证的解决方案。其原理是服务端生成一个包含用户唯一标识的 JSON 对象,颁发给客户端。客户端请求需要...

2019-11-07 10:16:42 2926 2

原创 解决 Mac OS 10.14 环境下 gem install ERROR: Failed to build gem native extension

环境Mac OS Mojave 10.14ruby 2.3.7p456 (2018-03-28 revision 63024)报错信息$ sudo gem install sassBuilding native extensions. This could take a while...ERROR: Error installing sass: ERROR: Failed to...

2019-10-22 16:50:00 5285

原创 Python 3.8.0 正式版发布,新特性初体验

北京时间 10 月 15 日,Python 官方发布了 3.8.0 正式版,该版本较 3.7 版本再次带来了多个非常实用的新特性。赋值表达式PEP 572: Assignment Expressions新增一种新语法形式::=,又称为“海象运算符”(为什么叫海象,看看这两个符号像不像颜表情),如果你用过 Go 语言,应该对这个语法非常熟悉。具体作用我们直接用实例来展示,比如在使用正则匹...

2019-10-17 11:08:04 1128

原创 众咖云集的 PyCon 2019 上海站,大佬们都讲了啥

9 月 21 号周六,我参加了 PyCon China 2019 上海站,这是每年一届的 Python 中国开发者大会。[外链图片转存失败(img-JEeYYgS0-1569341102384)(http://static.zkqiang.cn/images/20190922124621.jpg-slim)]今年的上海站比往年的阵容扩大很多,「流畅的 Python」作者、Flask 作者及核心...

2019-09-25 00:05:44 930

原创 Markdown 转换公众号文章,不再为排版花时间

上一篇「又一家数据公司被查,爬虫到底做错了什么?」反响强烈,虽然我这是新号,但还是获得了不少公众号的转发,借机也结识了很多业内大佬,在此感谢大家的抬爱!同时也有不少号主问我的文章排版是用的哪个网站,我的回答是:自己做的网站!没错,这就是本文的主角—— 公众号 Markdown 编辑器这是我基于一位大佬 @Lyric 开发的项目,进行 Fork 后的二次开发,因为原项目已经几个月没更新,有...

2019-09-14 14:23:55 1109

原创 又一家数据公司被查,爬虫到底做错了什么?

9 月 6 日下午,多位业内人士称,杭州知名大数据服务公司杭州魔蝎数据科技有限公司,疑似被相关执法人员控制,其中一位周姓核心高管人员被警方带走。以上是前几天技术圈传播的一则新闻,又一家数据公司被调查,很多数据从业者、爬虫开发者发出了“感叹” —— 「爬虫用得好,XX进得早;数据玩得溜,XX吃个够」。魔蝎科技作为一家数据服务公司,曾在 2017 年一篇『爬虫凶猛:爬支付宝、爬微信、窃取现金贷...

2019-09-13 02:00:50 6101

原创 爬虫工程师分享:三步就搞定 Android 逆向

本文源于我近期的一次公司内部分享,通过逆向某款 APP 来介绍逆向过程。由于仅作为学习用途,APP 的相关信息会被遮盖,敬请理解。关于逆向逆向——包括但不限于通过反编译、Hook 等手段,来解析一些功能的实现过程。逆向在很多领域都有应用,比如如今爬虫技术已经遍地走,甚至不用写代码都可以爬取数据,导致前端开发的反爬意识也逐步提升。因此 JS、Android 等领域的逆向,已经成为爬虫开发者...

2019-09-05 23:31:36 2075

原创 爬虫工程师常用的 Chrome 插件

做多了爬虫都知道,写一个爬虫大部分时间不是在代码上,而是在分析网页上,所有有一套好用的工具可以极大节省劳动力,这里把平时积累的一些 Chrome 插件分享出来,均来自本人和同事推荐,并不定时更新,欢迎点赞和收藏。注意下载地址是谷歌应用商店,访问需要特殊方法,你懂的。XPath Helper相比较 Chrome 自身的 html 搜索,这款插件好用之处是可以显示匹配结果,在插件里写出正确...

2019-06-02 17:14:09 3394

原创 Python 描述符(Descriptor) 附实例

在 Python 众多原生特性中,描述符可能是最少被自定义的特性之一,但它在底层实现的方法和属性却无时不刻被使用着,它优雅的实现方式体现出 Python 简洁之美。定义一个描述符是一个有“绑定行为”的对象属性(object attribute),它的访问控制会被描述器协议方法重写。 任何定义了 __get__, __set__ 或者 __delete__ 任一方法的类称为描述符类,...

2019-05-05 12:01:00 758

原创 Python 捕获线程中的异常

import sysfrom threading import Threaddef install_thread_excepthook(): init_original = Thread.__init__ def init(self, *args, **kwargs): init_original(self, *args, **kwargs) ...

2019-04-06 16:47:59 4554

原创 爬虫必备:Python 执行 JS 代码 —— PyExecJS、PyV8、Js2Py

在使用爬虫中,经常会遇到网页请求数据是经过 JS 处理的,特别是模拟登录的时候。而目前绝大部分前端 JS 代码都是经过混淆的,可读性极低,想理解代码逻辑需要花费大量时间。这时不要着急使用 Selenium 暴力解决,毕竟 Selenium 严重拖慢爬虫效率,我们可以尝试使用一些第三方库,来直接执行前端 JS 代码得到处理过后的结果。选择第三方库首先我们要选择一个合适的第三方库进行安装,帮助...

2019-03-18 11:47:19 5432

原创 如何理解“面向对象”编程思想

理解面向对象,首先理解要它的基础概念:面向对象 ( Object Oriented ) 是将现实问题构建关系,然后抽象成类 ( class ),给类定义属性和方法后,再将类实例化成实例 ( instance ),通过访问实例的属性和调用方法来进行使用。在不同的语言中,对象的定义范围不同。在 Python 中“类”和“类的实例”都称为对象 ( Object ),因为 Python 的...

2019-03-04 10:28:33 1522

原创 Python 轻量化简繁转换

最近项目中用到了简单的简繁转换,如果用OpenCC太重了,于是搜到了zhconv这个库。zhconv 提供基于 MediaWiki 词汇表的最大正向匹配简繁转换,Python 2, 3 通用。支持以下地区词转换:zh-tw 台灣正體 zh-hk 香港繁體 zh-sg 马新简体 zh-hans 简体 zh-hant 繁體正好适合我不求转换质量的轻量需求,所以介绍...

2019-03-01 11:27:53 1062

原创 Python 输出命令行进度条

在使用 pip 安装时,你会发现有下载进度条,我们也可以借助开源的第三方库来实现这个功能,在项目输出时增加一些可视化效果。一个简单易用的第三方库是:progress作者提供了动图很直观地展现了实现的所有输出。这个库实现了两类样式,一类是有终点的进度条样式,另一类是多用于加载的转圈样式。import timefrom progress.bar import Barb...

2019-03-01 11:26:22 1330

原创 打印 Python 的一切 —— pprint & beeprint

打印,是所有程序员从小白时期就具备的神技,遇事不决打印一下,是 DEBUG 最简单且不依赖 IDE 的方式,自定义各种日志输出,也是项目成型后必备功能。但是为了优雅的打印格式,往往需要对各种对象进行特殊格式化,可遇到字典和大段字符串也不好处理。这篇文章介绍两个库模块,可以快速有效的解决所有 Python 对象的打印输出,没错,所有。pprint这是 Python 标准库模块,全称 pr...

2019-03-01 11:15:07 1571

原创 Python3 中 configparser 模块解析配置的用法详解

configparser 简介configparser 是 Pyhton 标准库中用来解析配置文件的模块,并且内置方法和字典非常接近。Python2.x 中名为 ConfigParser,3.x 已更名小写,并加入了一些新功能。配置文件的格式如下:[DEFAULT]ServerAliveInterval = 45Compression = yesCompressionLevel = 9...

2019-03-01 11:00:36 1073

原创 2019年最新 Python 模拟登录知乎 支持验证码

2019年最新 Python 模拟登录知乎 支持验证码和保存 Cookies知乎的登录页面已经改版多次,加强了身份验证,网络上大部分模拟登录均已失效,所以我重写了一份完整的,并实现了提交验证码 (包括中文验证码),本文我对分析过程和代码进行步骤分解,完整的代码请见末尾 Github 仓库,不过还是建议看一遍正文,因为代码早晚会失效,解析思路才是永恒。分析 POST 请求首先打开控制台...

2019-03-01 10:58:42 1234

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除