谢乾坤 | Kingname

给时光以生命。

我们知道,HTTP请求的 POST 方式,提交上去的数据有很多种格式。例如JSON/form-data/x-www-form-urlencoded等等。我们在 Postman 的 POST 请求里面,可以看到这些数据格式,如下图所示:

阅读全文 »

很多人都知道环境变量,很多人也在使用环境变量。但是很多人一说到在 Linux、macOS 中使用环境变量,第一个想到的就是export XXX=yyy这种形式的环境变量。但实际上,在 Linux 和 macOS 中,定义环境变量有三种方式,他们的效果和作用范围是不相同的。

阅读全文 »

有一些同学在写爬虫的时候,喜欢在Chrome 开发者工具里面直接复制 XPath,如下图所示:

他们觉得这样复制出来的 XPath 虽然长了点,但是工作一切正常,所以频繁使用。

但我希望大家不要过于依赖这个功能。因为它给出的结果仅作参考,有时候并不能让你提取出数据。我们来看一个例子。

阅读全文 »

今天在读者交流群里面,有同学提到这样一个问题:

这个同学想实现,在代码第35行,如果进入了 if 判断,那么就退出第40-43行对应的 ac 函数。

能问出这个问题,说明这个同学显然没有认真看我的微信公众号。就在几天前我才发了一篇文章:一日一技:Python多线程的事件监控。使用这篇文章里面讲到的方法,就可以轻易实现他的需求。

在那篇文章中,我们讲到了threading.Event,这个东西不仅可以在线程之间使用,也可以在主线程和子线程之间使用。

阅读全文 »

现在阿里云,腾讯云等等云服务商都已经提供对象储存服务,我们可以使用对象储存来存放文件或者图片。通过云服务商提供的 SDK,一行代码就可以把文件或者图片上传到对象储存,并获得文件的地址。

我的博客图片就使用腾讯云的对象储存作为图床,所以如果你查看图片的地址,会发现他们的网址是这样的:

1
https://kingname-1257411235.file.myqcloud.com/IMG_5551.JPEG

其中的https://kingname-1257411235.file.myqcloud.com/就是我的对象储存的域名。

然而,在公司的项目中,虽然我们也是用云服务商提供的对象储存来存放图片,但是我们会额外开发一个图片服务接口。所以,公司项目网站的图片,使用的地址类似于:https://img.kingname.info/xxx.png。当你访问这个地址的时候,这个图片服务会从域名拿到图片的名字xxx.png,然后访问对象储存拿到这张图片,最后再把这种图片以数据流的形式返回给你。

你可能会觉得,这不是多此一举吗?为什么不能让用户直接访问对象储存获得图片呢?单独做一个图片接口不仅增加了开发时间,而且还需要服务器单独再发一次请求到对象储存拿数据,白白增加了访问延迟,怎么看都是得不偿失啊。

这是因为,工程上的问题,有时候不仅仅是一个行与不行的问题。它需要考虑很多额外的因素。

阅读全文 »

Redis 在日常的开发中,会积累大量的 Key,占用不少内存空间。有时候,我们想知道当前 Redis 里面有多少个 Key,是哪个 Key 占用了最大的内存。

但是,我们知道,由于 Redis 是单线程数据库,所以在线上环境是绝对禁止使用keys *这种命令的,因为它会花费很长时间扫描所有的 Key,在这个过程中,Redis 会卡死,无法处理其他的读写操作。

那么,我们应该怎么知道当前有多少个 Key 呢?有同学说可以使用scan命令。但这个命令一方面是需要写程序来迭代,另一方面是它给出的结果可能是不准确的。

阅读全文 »

今天在公众号粉丝群里面,有一位同学提到了 Python 找不到模块的问题:

问题涉及到的代码结构和代码截图如下:

这个问题的解决方法非常简单,就是把start.py文件从bin文件夹移出来就好了。

但如果对这个问题进一步分析,可以看到更多问题。

阅读全文 »

经常使用 Selenium 或者 Puppeteer 的同学都知道,他们启动的 Chrome 浏览器分为有头模式和无头模式。在自己电脑上操作时,如果是有头模式,会弹出一个 Chrome 浏览器窗口,然后你能看到这个浏览器里面在自动操作。而无头模式则不会弹出任何窗口,只有进程。

别去送死了。Selenium 与 Puppeteer 能被网站探测的几十个特征这篇文章中,我们介绍了一个探测模拟浏览器特征的网站。通过他我们可以发现,在不做任何设置的情况下,Selenium 或者 Puppeteer 启动的浏览器有几十个特征能够被目标网站识别为爬虫。并且,无头模式的特征比有头模式的特征多得多。

阅读全文 »

使用 macOS 的同学,应该熟悉一个命令pbcopy,它可以在命令行中把一段内容写入到剪贴板,例如:

1
echo "kingname" | pbcopy

就能把字符串kingname复制到剪贴板里面。我们也可以使用这个方法把一个文件中的内容写入到剪贴板:

1
cat xxx.txt | pbcopy

这样我们就不需要把文件打开再手动复制的。

有时候,我要把服务器上面的日志复制下来。原来都是进入服务器以后,用 vim 打开日志文件,用鼠标选中再复制。且不说服务器是 Linux,没有pbcopy这个命令,即使有这个命令,服务器上又怎么能访问本地的剪贴板呢?

阅读全文 »
0%