0%

个人随笔

大家有没有这样的一个经历:

周末和节假日出去疯玩了几天,期间没有任何学习或总结,到了周一前或者到了晚上的时候,会不会感觉到有点焦虑?比如就会想:我怎么今天又玩了一天,我还有什么什么事还没做呢,还有什么什么东西还没学呢,今天都没有什么进步,诸如此类的吧,然后就产生了一种焦虑感,想去做点什么事情找补一下。

我也有这样的情况。

我觉得我可能是一个自我 Push 比较强的人。比如有一天,我觉得自己做的东西没什么意义,或者疯玩了一天也没有学习和进步,到了一天结束的时候就会感到有些焦虑。我就想通过一些事情找补点什么回来,于是可能就想熬夜看点或者学习点东西。但实际上,有时候我也不知道应该看点什么,但总觉得需要学点或者看点什么,以“欺骗”自己的大脑今天我学习了,进步了,然后焦虑就会缓解一些。当然也有时候确实也知道自己每天还有什么事情没有完成,做完了焦虑就缓解了。

但长期以来,我感觉这样其实是不健康的,我也一直在思考我应该做点什么来解决这个问题。

经历了一些思考和尝试之后,我发现了其中的一个原因:当我给自己没有制定明确的计划和目标的时候,这种焦虑就会很频繁发生。

这个计划和目标分为长期的和短期的,长期目标和规划比较大、比较远或者说比较空洞,而短期目标和规划就是为了长期目标而制定的具体的执行方案,更能使我们焦虑的,就是短期目标和规划的缺失。

假如我没有为自己制定短期的计划,到了周末不上班的时候,就会突然不知道自己应该做些什么,至少在那一天我不知道应该做些什么。由于没有当天的规划,所以那天可能就漫无目的地休闲娱乐,比如说赖床、躺尸、刷手机(比如微博、知乎、朋友圈、抖音等)、玩游戏等等,当然也有时候无聊了就约朋友出去玩,但时间就这么一点点过去了。等到晚上到来,我就会发现,这一天怎么这么快就过去了?我好像今天也没有干什么事情,我就会焦虑,觉得今天也没有做有意义的事情,觉得我拥有的能够达成我的长期目标的时间和机会又变少了。因为长期计划会隐藏在我的潜意识里,我想达成某个大的目标,但经历了无所事事的一天之后,就会觉得我又浪费了一天,就会感觉到我能达成长期目标的几率仿佛又变小了,焦虑感就油然而生了。

为了验证我的这个想法,我就有意识地进行一些测试,比如在某一段时间我就不给自己制定短期和具体计划,任凭想到啥做啥,然后就发现那个时间段焦虑感很强。然后我就又尝试梳理自己的一些目标和具体每天应该做的一些事情,每天按照我的计划去执行,每天完成了既定计划之后,就会感觉很踏实。甚至完成了既定计划之后还能超额再做点什么的时候,就会感觉成就感爆棚。

嗯,总之,经过我的一些尝试之后,就感觉 —— 为自己制定短期的目标和规划真的很有帮助,这个短期的目标和规划时间段可能在一个月或者几周,先想这个月或者几周应该去做些什么,然后细化到每天应该去做些什么,这个一定要列详细,不要空洞,然后最好还能标记好优先级。就比如说,我规划一个月可能要学一门课程,那么我就分配一下,我哪一天需要具体学从第几节到第几节的内容,记录到我的 Todo List 里面。我是用的「滴答清单」这款软件,在里面我就给我每天需要做的事情做好分配,这样每天我就知道自己需要做什么了。

但这时候有朋友可能就说,难道你周末规划的也全是学习和工作吗?娱乐、放松呢?这个当然也是有的。我觉得人不能把自己逼的太紧了,每天都紧绷着做各种各样的事情,弦会断的。所以,有时候我就会给自己规划有些时间段就是可以放松和玩的,比如周五晚上就玩游戏、周六上午就赖床多睡会、周末也会规划时间出去玩等等。

所以,做好了规划,不论是学习、工作还是放松、娱乐,这都是在自己的期望和规划之中。比如我就规划了某个时间段去放空自己玩两天,那两天就全身心放松玩两天,那也不会有什么焦虑,因为这就在我的期望之内,我知道玩完这两天,我后面的一些规划时间和事情仍然可以正常完成我做达成的短期和长期目标,焦虑感自然就不会产生了。

嗯,就是这样。如果你也遇到了文章一开始我提到的问题,不妨尝试给自己制定一个详细的短期目标和规划吧。

更多精彩内容,请关注我的公众号「进击的 Coder」和「崔庆才丨静觅」。

安装配置

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

如果你还不了解 YML 文件配置,可以先阅读 YAML 入门教程

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

安装

当前,最新的 Docker 已经把 Compose 作为 Docker 的命令一部分了,可以直接安装 Docker:https://setup.scrape.center/docker

另外如果要单独安装 Docker-Compose,可以参考 https://www.runoob.com/docker/docker-compose.html

安装配置

Helm 是 Kubernetes 的包管理器。

相关链接

  • 官网:https://helm.sh/
  • 中文文档:https://helm.sh/zh/docs/

该指南展示了如何安装 Helm CLI。Helm 可以用源码或构建的二进制版本安装。

下面的内容来自:https://helm.sh/zh/docs/intro/install/,最新内容以该链接为准。

用 Helm 项目安装

Helm 项目提供了两种获取和安装 Helm 的方式。这是官方提供的获取 Helm 发布版本的方法。另外, Helm 社区提供了通过不同包管理器安装 Helm 的方法。这些方法可以在下面的官方方法之后看到。

用二进制版本安装

每个 Helm 版本都提供了各种操作系统的二进制版本,这些版本可以手动下载和安装。

  1. 下载 需要的版本
  2. 解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
  3. 在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)

然后就可以执行客户端程序并 添加稳定仓库: helm help.

注意 针对 Linux AMD64,Helm 的自动测试只有在 CircleCi 构建和发布时才会执行。测试其他操作系统是社区针对系统问题请求 Helm 的责任。

使用脚本安装

Helm 现在有个安装脚本可以自动拉取最新的 Helm 版本并在 本地安装

您可以获取这个脚本并在本地执行。它良好的文档会让您在执行之前知道脚本都做了什么。

1
2
3
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh

如果想直接执行安装,运行curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

通过包管理器安装

Helm 社区提供了通过操作系统包管理器安装 Helm 的方式。但 Helm 项目不支持且不认为是可信的第三方。

使用 Homebrew (macOS)

Helm 社区成员贡献了一种在 Homebrew 构建 Helm 的方案,这个方案通常是最新的。

1
brew install helm

(注意:还有一个 emacs-helm 的方案,当然这是另一个项目了。)

使用 Chocolatey (Windows)

Helm 社区成员贡献了一个 Helm 包Chocolatey中构建, 包通常是最新的。

1
choco install kubernetes-helm

使用 Apt (Debian/Ubuntu)

Helm 社区成员贡献了针对 Apt 的一个 Helm 包,包通常是最新的。

1
2
3
4
5
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

使用 Snap

Snapcrafters社区维护了 Helm 包的 Snap 版本:

1
sudo snap install helm --classic

使用 pkg (FreeBSD)

FreeBSD 社区成员贡献了一个 Helm 页面来构建 FreeBSD 端口集。通常都是最新的包。

1
pkg install helm

开发版本构建

另外您可以下载和安装 Helm 的开发版本。

使用 Canary 构建

“Canary”版本是从 Helm 最新的 master 分支构建。这些不是官方版本,可能不稳定。但是这提供测试边缘特性的条件。

Canary Helm 二进制包存储在 get.helm.sh。以下是一般构建的链接:

  • Linux AMD64
  • macOS AMD64
  • 实验性 Windows AMD64

使用源码 Source (Linux, macOS)

从源码构建 Helm 的工作要稍微多一点,但如果你想测试最新(预发布)的 Helm 版本,这是最好的方式。

您必须有可用的 Go 环境。

1
2
3
$ git clone https://github.com/helm/helm.git
$ cd helm
$ make

如果需要,会拉取依赖并缓存,然后验证配置。然后会编译helm并放在bin/helm

总结

大多数情况下,安装只需要简单地获取一个构建好的helm二进制包。本文档为想使用 Helm 做更复杂事情的人提供额外示例。

一旦你成功安装了 Helm 客户端,就可以继续使用 Helm 管理 chart 和 添加稳定的仓库

安装配置

Kubernetes,又被简称作 K8s(K 和 s 中间含有 8 个字母),它是用于编排容器化应用程序的云原生系统。Kubernetes 诞生自 Google,现在已经由 CNCF (云原生计算基金会)维护更新。Kubernetes 是目前最受欢迎的集群管理方案之一,可以非常容易地实现容器的管理编排。

刚刚我们提到,Kubernetes 是一个容器编排系统,对于“编排”二字,可能不太容易理解其中的含义。为了对它有更好的理解,我们先回过头来看看容器的定位是什么以及容器解决了什么问题,不能解决什么问题,然后我们再来了解下 Kubernetes 能够弥补容器哪些缺失的内容。

好,首先来看容器。最常见的容器技术就是 Docker 了,容器它提供了相比传统虚拟化技术更轻量级的机制来创建隔离的应用程序的运行环境。比如对于某个应用程序,我们使用容器运行时,不必担心它与宿主机之间产生资源冲突,不必担心多个容器之间产生资源冲突。同时借助于容器技术,我们还能更好地保证开发环境和生产环境的运行一致性。另外由于每个容器都是独立的,因此可以将多个容器运行在同一台宿主机上,以提高宿主机资源利用率,从而也进一步降低了成本。总之,使用容器带来的好处很多,可以为我们带来极大的便利。

不过单单依靠容器技术并不能解决所有的问题,也可以说容器技术也引入了新的问题,比如说:

  • 如果容器突然运行异常了怎么办?
  • 如果容器所在的宿主机突然运行异常了怎么办?
  • 如果有多个容器,他们之间怎么有效地传输数据?
  • 如果单个容器达到了瓶颈,如何平稳且有效地进行扩容?
  • 如果生产环境是由多台主机组成的,我们怎样更好地决定使用哪台主机来运行哪个容器?

以上列举了一些单纯依靠容器技术或者单纯依靠 Docker 不能解决的问题,而 Kubernetes 作为容器编排平台,提供了一个可弹性运行的分布式系统框架,各个容器可以运行在 Kubernetes 平台上,容器的管理、调度、部署、扩容等各个操作都可以经由 Kubernetes 来有效实现。比如说,Kubernetes 可以管理单个容器的声明周期,并且可以根据需要来扩展和释放资源,如果某个容器意外关闭,Kubernetes 可以根据对应的策略选择重启该容器,以保证服务的正常运行。再比如说,Kubernetes 是一个分布式的平台,当容器所在的主机突然发生异常,Kubernetes 可以将异常主机上运行的容器转移到其他正常的主机上运行,另外 Kubernetes 还可以根据容器运行所需要占用的资源自动选择合适的主机来运行。总之,Kubernetes 对容器的调度和管理提供了非常强大的支持,可以帮我们解决上述的诸多问题。

相关资料

  • 官方文档:https://kubernetes.io/docs/home/

安装方式

安装 Kubernetes 有好多方式,比如 Minicube、Docker 自带、自建集群、云服务商提供。

Minicube

参考:https://kubernetes.io/docs/tutorials/hello-minikube/

Docker 自带

现在 Docker for Windows 和 Docker for Mac 已经自带了 Kubernetes 的集群功能,只需要打开对应开关即可,如图所示:

image-20211004003229922

这里只需要把 Enable Kubernetes 勾选即可。

集群搭建

搭建 Kubernetes 集群是比较麻烦的,参考链接:

  • https://segmentfault.com/a/1190000040107263
  • https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/high-availability/
  • https://www.kubernetes.org.cn/7315.html

云服务商

很多云服务商已经提供了 Kubernetes,请移步对应云服务商的功能支持说明,参考链接:

  • Azure:https://azure.microsoft.com/en-us/services/kubernetes-service/
  • Google:https://cloud.google.com/kubernetes-engine
  • Amazon:https://aws.amazon.com/cn/eks/
  • 腾讯云:https://cloud.tencent.com/product/tke
  • 阿里云:https://cn.aliyun.com/product/kubernetes
  • 华为云:https://support.huaweicloud.com/kubernetes.html
  • 百度云:https://cloud.baidu.com/product/cce.html

安装配置

用 Splash 做页面抓取时,如果爬取的量非常大,任务非常多,用一个 Splash 服务来处理的话,未免压力太大了,此时可以考虑搭建一个负载均衡器来把压力分散到各个服务器上。这相当于多台机器多个服务共同参与任务的处理,可以减小单个 Splash 服务的压力。

配置 Splash 服务

要搭建 Splash 负载均衡,首先要有多个 Splash 服务。假如这里在 4 台远程主机的 8050 端口上都开启了 Splash 服务,它们的服务地址分别为 41.159.27.223:8050、41.159.27.221:8050、41.159.27.9:8050 和 41.159.117.119:8050,这 4 个服务完全一致,都是通过 Docker 的 Splash 镜像开启的。访问其中任何一个服务时,都可以使用 Splash 服务。

具体的 Splash 搭建流程可以参考:https://setup.scrape.center/splash

配置负载均衡

接下来,可以选用任意一台带有公网 IP 的主机来配置负载均衡。首先,在这台主机上装好 Nginx,然后修改 Nginx 的配置文件 nginx.conf,添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
http {
upstream splash {
least_conn;
server 41.159.27.223:8050;
server 41.159.27.221:8050;
server 41.159.27.9:8050;
server 41.159.117.119:8050;
}
server {
listen 8050;
location / {proxy_pass http://splash;}
}
}

这样我们通过 upstream 字段定义了一个名字叫作 splash 的服务集群配置。其中 least_conn 代表最少链接负载均衡,它适合处理请求处理时间长短不一造成服务器过载的情况。

当然,我们也可以不指定配置,具体如下:

1
2
3
4
5
6
upstream splash {
server 41.159.27.223:8050;
server 41.159.27.221:8050;
server 41.159.27.9:8050;
server 41.159.117.119:8050;
}

这样默认以轮询策略实现负载均衡,每个服务器的压力相同。此策略适合服务器配置相当、无状态且短平快的服务使用。

另外,我们还可以指定权重,配置如下:

1
2
3
4
5
6
upstream splash {
server 41.159.27.223:8050 weight=4;
server 41.159.27.221:8050 weight=2;
server 41.159.27.9:8050 weight=2;
server 41.159.117.119:8050 weight=1;
}

这里 weight 参数指定各个服务的权重,权重越高,分配到处理的请求越多。假如不同的服务器配置差别比较大的话,可以使用此种配置。

最后,还有一种 IP 散列负载均衡,配置如下:

1
2
3
4
5
6
7
upstream splash {
ip_hash;
server 41.159.27.223:8050;
server 41.159.27.221:8050;
server 41.159.27.9:8050;
server 41.159.117.119:8050;
}

服务器根据请求客户端的 IP 地址进行散列计算,确保使用同一个服务器响应请求,这种策略适合有状态的服务,比如用户登录后访问某个页面的情形。对于 Splash 来说,不需要应用此设置。

我们可以根据不同的情形选用不同的配置,配置完成后重启一下 Nginx 服务:

1
sudo nginx -s reload

这样直接访问 Nginx 所在服务器的 8050 端口,即可实现负载均衡了。

配置认证

现在 Splash 是可以公开访问的,如果不想让其公开访问,还可以配置认证,这仍然借助于 Nginx。可以在 serverlocation 字段中添加 auth_basicauth_basic_user_file 字段,具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
http {
upstream splash {
least_conn;
server 41.159.27.223:8050;
server 41.159.27.221:8050;
server 41.159.27.9:8050;
server 41.159.117.119:8050;
}
server {
listen 8050;
location / {
proxy_pass http://splash;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}
}
}

这里使用的用户名和密码配置放置在 /etc/nginx/conf.d 目录下,我们需要使用 htpasswd 命令创建。例如,创建一个用户名为 admin 的文件,相关命令如下:

1
htpasswd -c .htpasswd admin

接下来,就会提示我们输入密码。输入两次之后,就会生成密码文件,其内容如下:

1
2
cat .htpasswd
admin:5ZBxQr0rCqwbc

配置完成后重启一下 Nginx 服务,运行如下命令:

1
sudo nginx -s reload

这样访问认证就成功配置好了。

测试

最后,我们可以用代码来测试一下负载均衡的配置,看看到底是不是每次请求会切换 IP。利用 http://httpbin.org/get 测试即可,实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import requests
from urllib.parse import quote
import re

lua = '''
function main(splash, args)
local treat = require("treat")
local response = splash:http_get("http://httpbin.org/get")
return treat.as_string(response.body)
end
'''

url = 'http://splash:8050/execute?lua_source=' + quote(lua)
response = requests.get(url, auth=('admin', 'admin'))
ip = re.search('(\d+\.\d+\.\d+\.\d+)', response.text).group(1)
print(ip)

这里 URL 中的 splash 字符串请自行替换成自己的 Nginx 服务器 IP。这里我修改了 Hosts,设置了 splash 为 Nginx 服务器 IP。

多次运行代码之后,可以发现每次请求的 IP 都会变化,比如第一次的结果:

1
41.159.27.223

第二次的结果:

1
41.159.27.9

这就说明负载均衡已经成功实现了,配置负载均衡后,可以多个 Splash 服务共同合作,减轻单个服务的负载,这还是比较有用的。

当然,我们也可以借助于 Kubernetes + Docker 来实现负载均衡,管理起来更加简单方便,感兴趣可以搜索相关内容试验一下。

安装配置

爬虫过程中难免会遇到各种各样的验证码,而大多数验证码还是图形验证码,这时候我们可以直接用 OCR 来识别。

OCR

OCR,即 Optical Character Recognition,光学字符识别。是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。那么对于图形验证码来说,它都是一些不规则的字符,但是这些字符确实是由字符稍加扭曲变换得到的内容。

例如这样的验证码,如图所示:

对于这种验证码,我们便可以使用 OCR 技术来将其转化为电子文本,然后爬虫将识别结果提交给服务器,便可以达到自动识别验证码的过程。

Tesserocr 是 Python 的一个 OCR 识别库,但其实是对 Tesseract 做的一层 Python API 封装,所以它的核心是 Tesseract,所以在安装 Tesserocr 之前我们需要先安装 Tesseract,本节我们来了解下它们的安装方式。

相关链接

  • Tesserocr GitHub:https://github.com/sirfz/tesserocr
  • Tesserocr PyPi:https://pypi.python.org/pypi/tesserocr
  • Tesseract 下载地址:http://digi.bib.uni-mannheim.de/tesseract
  • Tesseract GitHub:https://github.com/tesseract-ocr/tesseract
  • Tesseract 语言包:https://github.com/tesseract-ocr/tessdata
  • Tesseract 文档:https://github.com/tesseract-ocr/tesseract/wiki/Documentation

Windows 下的安装

本小节内容来自于:https://segmentfault.com/a/1190000039929696,可以移步此链接查看原文。

另外也可以查看其他博文,如:https://cloud.tencent.com/developer/article/1616037 来安装和排查。

为了增大成功安装的几率,推荐使用 Python 3.7 版本。

在 Windows 下,首先需要下载 Tesseract,它为 Tesserocr 提供了支持,下载链接为:http://digi.bib.uni-mannheim.de/tesseract/

点击进入之后可以看到有各种 exe 的下载列表,在这里可以选择下载 4.0 版本 tesseract-ocr-setup-4.00.00dev.exe,如图所示:

其中文件名中带有 dev 的为开发版本,不带 dev 的为稳定版本。

下载完成之后双击安装即可,在安装过程中可以勾选上 Additional language data 选项,安装 OCR 识别支持的语言包,这样 OCR 便可以识别多国语言。

复制你的安装路径,我的安装路径 D:\Python\Tesseract-OCR,界面如下:

打开我的电脑系统属性->高级->环境变量,把该路径配置到环境变量:

然后将下载好的字库放到 Tesseract-OCR 项目的 tessdata 文件夹里面。

接下来再安装 Tesserocr 即可,直接使用 Pip 安装:

1
pip3 install tesserocr pillow

另外如果安装过程中出现错误,请移步官方安装说明排查问题:https://github.com/sirfz/tesserocr

Linux 下的安装

对于 Linux 来说,不同系统已经有了不同的发行包了,它可能叫做 tesseract-ocr 或者 tesseract,直接用对应的命令安装即可。

Ubuntu、Debian、Deepin

安装命令如下:

1
sudo apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev

CentOS、RedHat

安装命令如下:

1
yum install -y tesseract

不同发行版本运行如上命令即可完成 Tesseract 的安装。

安装完成之后便可以调用 tesseract 命令了。

我们查看一下其支持的语言:

1
tesseract --list-langs

运行结果示例:

1
2
3
4
List of available languages (3):
eng
osd
equ

结果显示其只支持几种语言,如果我们想要安装多国语言还需要安装语言包,官方叫做 tessdata。

tessdata 的下载链接为:https://github.com/tesseract-ocr/tessdata

利用 Git 命令将其下载下来并迁移到相关目录即可,不同的版本迁移命令如下:

Ubuntu、Debian、Deepin

1
2
git clone https://github.com/tesseract-ocr/tessdata.git
sudo mv tessdata/* /usr/share/tesseract-ocr/tessdata

CentOS、RedHat

1
2
git clone https://github.com/tesseract-ocr/tessdata.git
sudo mv tessdata/* /usr/share/tesseract/tessdata

这样就可以将下载下来的语言包全部安装了。

这时我们重新运行列出所有语言的命令:

1
tesseract --list-langs

结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
List of available languages (107):
afr
amh
ara
asm
aze
aze_cyrl
bel
ben
bod
bos
bul
cat
ceb
ces
chi_sim
chi_tra
...

即可发现其列出的语言就多了非常多,比如 chi_sim 就代表简体中文,这就证明语言包安装成功了。

接下来再安装 Tesserocr 即可,直接使用 Pip 安装:

1
pip3 install tesserocr pillow

Mac 下的安装

Mac 下首先使用 Homebrew 安装 Imagemagick 和 Tesseract 库:

1
2
brew install imagemagick
brew install tesseract --all-languages

接下来再安装 Tesserocr 即可:

1
pip3 install tesserocr pillow

这样我们便完成了 Tesserocr 的安装。

验证安装

接下来我们可以使用 Tesseract 和 Tesserocr 来分别进行测试。

下面我们以如下的图片为样例进行测试,如图所示:

图片链接为:https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png,可以直接保存或下载。

我们首先用命令行进行测试,将图片下载保存为 image.png,然后用 Tesseract 命令行测试,命令如下:

1
tesseract image.png result -l eng && cat result.txt

运行结果:

1
2
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
Python3WebSpider

我们调用了 tesseract 命令,第一个参数为图片名称,第二个参数 result 为结果保存的目标文件名称,-l 指定使用的语言包,在此使用 eng 英文,然后再用 cat 命令将结果输出。

第二行的运行结果便是图片的识别结果,Python3WebSpider。

我们可以看到这时已经成功将图片文字转为电子文本了。

然后我们还可以利用 Python 代码来测试,这里就需要借助于 Tesserocr 库了,测试代码如下:

1
2
3
4
import tesserocr
from PIL import Image
image = Image.open('image.png')
print(tesserocr.image_to_text(image))

在这里我们首先利用 Image 读取了图片文件,然后调用了 tesserocr 的 image_to_text() 方法,再将将其识别结果输出。

运行结果:

1
Python3WebSpider

另外我们还可以直接调用 file_to_text() 方法,也可以达到同样的效果:

1
2
import tesserocr
print(tesserocr.file_to_text('image.png'))

运行结果:

1
Python3WebSpider

如果成功输出结果,则证明 Tesseract 和 Tesserocr 都已经安装成功。

安装配置

Frida 是一个基于 Python 和 JavaScript 的 Hook 与调试框架,是一款易用的跨平台 Hook 工具,无 论 Java 层的逻辑,还是 Native 层的逻辑,它都可以 Hook。Frida 可以把代码插入原生 App 的内存空 间,然后动态地监视和修改其行为,支持 Windows、Mac、Linux、Android、iOS 全平台。

相关链接

  • 官网:https://frida.re/
  • GitHub:https://github.com/frida/frida

安装

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install frida frida-tools

命令执行完毕之后即可完成安装。

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import frida

如果没有错误报出,则证明库已经安装好了。

更多安装说明参考:https://frida.re/docs/installation/

安装配置

IDA Pro 的英文全称是 Interactive Disassembler Professional,即交互式反汇编器专业版,大家也称 之为 IDA。它由一家总部位于比利时的 Hex-Rayd 公司开发,功能十分强大,是目前流行的反汇编软 件之一,也是安全分析人士必备的一款软件。

IDA Pro 最重要的功能便是可以将二进制文件中的机器代码(如 010101)转化成汇编代码,甚至 可以进一步根据汇编代码的执行逻辑还原出高级语言(如 C/C++)编写的代码,从而大大提高代码的 可读性。IDA Pro 不仅仅局限于分析 Android 中的 so 文件,它可以处理和分析几乎所有的二进制文件, Windows、DOS、Unix、Linux、Mac、Java、.NET 等平台的二进制文件都不在话下。另外,IDA Pro 提 供了图形界面和强大的调试功能,利用它我们可以直观地实时调试和分析二进制文件。除了这些,IDA Pro 还提供开放式的插件架构,我们可以编写自定义的插件轻松扩展其功能。

总之,IDA Pro 是一款极其强大的反汇编软件,已经成为业界安全分析必不可少的一个工具,更多介绍可以查看 IDA Pro 的官网。

安装

IDA Pro 是收费的,但是有不少大佬已经破解了,可以移步相关资源查看:https://bbs.pediy.com/thread-263559.htm

其他的安装教程:

  • https://blog.csdn.net/qq_34732729/article/details/109184623
  • https://www.bilibili.com/video/BV1uA411V7LK/

安装配置

VirtualXposed 是基于VirtualAppepic非 ROOT环境下运行 Xposed 模块的实现(支持 5.0~10.0)。

与 Xposed 相比,目前 VirtualXposed 有两个限制:

  1. 不支持修改系统(可以修改普通 APP 中对系统 API 的调用),因此重力工具箱,应用控制器等无法使用。
  2. 暂不支持资源 HOOK,因此资源钩子不会起任何作用;使用资源 HOOK 的模块,相应的功能不会生效。

相关链接

  • 官网:https://vxp.app/
  • GitHub:https://github.com/android-hacker/VirtualXposed
  • 中文文档:https://github.com/android-hacker/VirtualXposed/blob/vxp/CHINESE.md

安装

可以到 https://github.com/android-hacker/VirtualXposed/releases 下载最新的安装包,如图所示:

image-20211004001344424

下载下来 apk 之后直接安装即可:

1
adb install VirtualXposed_0.20.3.apk

使用说明见:https://vxposed.com/,中文文档见:https://github.com/android-hacker/VirtualXposed/blob/vxp/CHINESE.md

安装配置

强烈建议看官方文档:https://developer.android.com/guide,因为这才是原汁原味的搭建流程指导。

一些中文教程也有,2021 年请移步:

  • https://www.cnblogs.com/kiba/p/14830060.html
  • https://www.jianshu.com/p/690a69bc031b

安装配置

EdXposed 在 Xposed 的基础上提供了 Android 8.0+ 的支持,同时提供了白名单、黑名单、兼容模式、无需重启等特性。

相关链接

  • 官网:https://edxp.meowcat.org/
  • GitHub:https://github.com/ElderDrivers/EdXposed

安装

由于 EdXposed 一直在更新,请移步最新官方文档 https://edxp.meowcat.org/ 查看最新安装说明:

安装配置

PyExecJS 是一个可以模拟调用 JavaScript 脚本的 Python 库。

相关链接

  • GitHub:https://github.com/doloopwhile/PyExecJS
  • PyPi:https://pypi.org/project/PyExecJS/

准备工作

PyExecJS 需要 Node.js 执行环境,请先安装 Node.js,参考:https://setup.scrape.center/nodejs。

安装方法

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install PyExecJS

命令执行完毕之后即可完成安装。

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import execjs

如果没有错误报出,则证明库已经安装好了。

安装配置

Elasticsearch 也有对应的 Python 库,名称也叫 Elasticsearch。

相关链接

  • GitHub:https://github.com/elastic/elasticsearch-py
  • 官方文档:https://elasticsearch-py.readthedocs.io/

准备工作

Elasticsearch 的 Python 库需要和 Elasticsearch 配合使用,在此之前请安装 Elasticsearch,安装教程参考: https://setup.scrape.center/elasticsearch。

安装方法

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install elasticsearch

命令执行完毕之后即可完成安装。

如果要支持异步 async,可以安装如下包:

1
pip3 install elasticsearch[async]

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import elasticsearch

如果没有错误报出,则证明库已经安装好了。

安装配置

Motor 是 PyMongo 的支持异步的库。

相关链接

  • 文档:https://motor.readthedocs.io/en/stable/
  • GitHub:https://github.com/mongodb/motor
  • PyPi: https://pypi.org/project/motor/

安装

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install motor

命令执行完毕之后即可完成安装。

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import motor

如果没有错误报出,则证明库已经安装好了。

安装配置

Numpy 是 Python 中的一个科学计算库,功能非常强大。

相关链接

  • 官网:https://numpy.org/
  • 文档:https://numpy.org/doc/stable/
  • 中文教程:https://www.runoob.com/numpy/numpy-tutorial.html

安装方法

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install numpy

命令执行完毕之后即可完成安装。

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import numpy

如果没有错误报出,则证明库已经安装好了。

安装配置

Pyppeteer 是一个自动化测试框架,是 Puppteer 的 Python 版本。

相关链接

  • GitHub:https://github.com/pyppeteer/pyppeteer
  • 文档:https://pyppeteer.github.io/pyppeteer/

安装

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install pyppeteer

命令执行完毕之后即可完成安装。

安装完成之后可以运行如下命令进行一些初始化操作:

1
pyppeteer-install

运行之后 Pyppeteer 会下载一个 Chromium 浏览器并配置好环境变量。

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import pyppeteer

如果没有错误报出,则证明库已经安装好了。

另外还可以运行测试脚本:

1
2
3
4
5
6
7
8
9
10
11
import asyncio
from pyppeteer import launch

async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('https://www.baidu.com')
await page.screenshot({'path': 'baidu.png'})
await browser.close()

asyncio.get_event_loop().run_until_complete(main())

运行之后,如果之前没有运行过 pyppeteer-install 命令的话,Pyppeteer 会进行一些初始化配置,运行完毕之后,就会启动浏览器,然后访问百度,生成截图。

安装配置

Redis 是一个基于内存的高效的非关系型数据库,本节我们来了解下 Redis 在各个平台的安装过程。

相关链接

  • 官方网站:https://redis.io
  • 官方文档:https://redis.io/documentation
  • 中文官网:http://www.redis.cn
  • GitHub:https://github.com/antirez/redis
  • 中文教程:http://www.runoob.com/redis/redis-tutorial.html
  • Redis Desktop Manager:https://redisdesktop.com
  • Redis Desktop Manager GitHub:https://github.com/uglide/RedisDesktopManager

Windows 下的安装

Redis 在 Windows 下可以直接到 https://redis.io/downloadhttps://nowjava.com/download/31283 下载。

安装过程比较简单,直接点击下一步安装即可,安装完成之后 Redis 便会启动。

在系统服务里可以观察到多了一个正在运行到 Redis 服务,如图所示:

img

另外推荐下载一个 Redis Desktop Manager 可视化管理工具,来管理 Redis。

可以到官方网站下载,链接为:https://redisdesktop.com/download 也可以到 GitHub 下载最新发行版本,链接为:https://github.com/uglide/RedisDesktopManager/releases

安装之后直接连接本地 Redis 即可,简单方便。

Linux 下的安装

这里依然还是分为两类平台介绍。

Ubuntu、Debian、Deepin

使用 apt-get 命令行安装:

1
sudo apt-get -y install redis-server

运行如上命令即可完成 Redis 的安装,然后输入 redis-cli 即可进入 Redis 命令行模式。

1
2
3
4
5
$ redis-cli
127.0.0.1:6379> set 'name' 'Germey'
OK
127.0.0.1:6379> get 'name'
"Germey"

这样就证明 Redis 成功安装了,但是现在 Redis 还是无法远程连接的,依然需要修改配置文件,配置文件路径为 /etc/redis/redis.conf。

注释这一行:

1
bind 127.0.0.1

另外推荐给 Redis 设置密码,取消注释这一行:

1
requirepass foobared

foobared 即当前密码,可以自行修改。

然后重启 Redis 服务,使用如下命令:

1
sudo /etc/init.d/redis-server restart

现在就可以使用密码远程连接 Redis 了。

另外停止和启动 Redis 服务的命令如下:

1
2
sudo /etc/init.d/redis-server stop
sudo /etc/init.d/redis-server start

CentOS、RedHat

首先添加 EPEL 仓库,然后更新 Yum 源:

1
2
sudo yum install epel-release
sudo yum update

然后安装 Redis 数据库:

1
sudo yum -y install redis

安装好之后启动 Redis 服务:

1
sudo systemctl start redis

同样可以使用 redis-cli 进入 Redis 命令行模式操作。

另外为了可以使 Redis 能被远程连接,需要修改配置文件,路径为 /etc/redis.conf。

注释这一行:

1
bind 127.0.0.1

另外推荐给 Redis 设置密码,取消注释这一行:

1
requirepass foobared

foobared 即当前密码,可以自行修改。

之后保存重启 Redis 服务:

1
sudo systemctl restart redis

这样就可以远程连接 Redis 了。

Mac 下的安装

推荐使用 Homenbrew 安装,执行 brew 命令即可。

1
brew install redis

启动 Redis 服务:

1
2
brew services start redis
redis-server /usr/local/etc/redis.conf

这样就启动了 Redis 服务。

同样可以使用 redis-cli 进入 Redis 命令行模式。

Mac 下 Redis 的配置文件路径是 /usr/local/etc/redis.conf,可以通过修改它来配置访问密码。

修改配置文件后需要重启 Redis 服务,停止、重启 Redis 服务的命令如下:

1
2
brew services stop redis
brew services restart redis

另外在 Mac 下也可以安装 Redis Desktop Manager 可视化管理工具来管理 Redis。

安装配置

retrying 提供了一些装饰器,使得我们非常方便地配置重试机制。

本节我们了解下 retrying 的安装方式。

相关链接

  • GitHub:https://github.com/rholder/retrying
  • PyPi:https://pypi.org/project/retrying/

安装方法

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install retrying

命令执行完毕之后即可完成安装。

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import retrying

如果没有错误报出,则证明库已经安装好了。

安装配置

Xposed 框架是一套开源的,在 Android 高权限模式下运行的框架服务,它可以在不修改 App 源码的情况下影响程序运行(修改系统)的框架服务。基于 Xposed,可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。

其实现原理我们稍作了解即可:Xposed 框架的原理是通过替换系统级别的 /system/bin/app_process 程序控制 zygote 进程,使得app_process 在启动过程中加载 XposedBridge.jar,这个 jar 包里面定义了对系统方法、属性的一系列 Hook 操作,同时还提供了几个 Hook API 供我们编写 Xposed 模块使用。我们在编写 Xposed 模块时,引用 Xposed 提供的几个 Hook 方法就可以实现对系统级别任意方法和属性的修改了。

安装

请移步:https://cn.sync-computers.com/how-install-xposed-framework

安装配置

ElasticSearch 是一个分布式的,高性能,高可用的,可伸缩的搜索和分析系统

(1)可以作为大型分布式集群(数百台服务器)技术,处理 PB 级的数据,服务大公司;也可以运行在单机上服务于小公司

(2)Elasticsearch 不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的 ES:lucene(全文检索),商用的数据分析软件,分布式数据库

(3)对用户而言,是开箱即用的,非常简单,作为中小型应用,直接 3 分钟部署一下 ES,就可以作为生产环境的系统来使用了,此时的场景是数据量不大,操作不是太复杂

(4)数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);

特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理,Elasticsearch 作为传统数据库的一个补充,提供了数据库所不能提供的很多功能。

安装教程

最官方的安装指南当属官网了,到 https://www.elastic.co/cn/downloads/elasticsearch 直接下载即可。

这里提供了各种系统的下载安装包,目前最新版本是 7.x。

下载完成之后,可以直接参考官网的教程来启动:

其实基本内容就是两步:

  • 解压下载的 zip 压缩文件
  • 直接运行 bin 目录下的 elasticsearch 脚本即可启动

启动之后,Elasticsearch 就会在 9200 端口上运行,这时候我们通过浏览器打开就会看到类似如下的输出:

这就证明 Elasticsearch 安装成功了。

另外 Elasticsearch 还有一个配套的可视化管理工具,叫做 Kibana,安装教程可以参考 https://www.elastic.co/cn/downloads/kibana,安装方式同 Elasticsearch。

安装配置

IntelliJ IDEA 是 java 语言开发的集成环境,在业界被公认为最好的 java 开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE 支持、各类版本工具(git、svn 等)、JUnit、CVS 整合、代码分析、 创新的 GUI 设计等方面的功能可以说是超常的。

安装

可以直接到官网 https://www.jetbrains.com/idea/download/ 下载对应的安装包,Windows、Mac、Linux 都有,如图所示:

其中 Ultimate 版本就是专业版,功能齐全而又强大,有 30 天的免费试用,而 Community 就是社区版,功能稍弱,但是永久免费。

其实一般来说,打开一个普通 Java 项目,社区版就足够了。

如果你想用专业版的话,如果 License 过期了,可以自行购买,或者网上找一些免费的 License,另外还可以申请 GitHub 大礼包:https://education.github.com/pack,申请完了之后就可以获得免费订阅了,如图所示:

整个下载安装的过程不再赘述,基本没有什么坑。

安装配置

JEB 是由 PNF 软件(PNF Software)机构开发的一款专业的安卓应用程序的反编译工具,适用于逆向和审计工程,功能非常强大。相比 jadx 来说,JEB 不仅仅支持安卓 apk 的反编译,安卓应用的动态调试,还支持 ARM、MIPS、AVR、Intel-x86、WebAssembly、Ethereum(以太坊)等程序的反编译、反汇编、动态调试等功能,另外还能对一些 PDF 文件进行解析和处理,是一个极其强大的综合性逆向和审计工具。

由于本章的主要内容和安卓逆向相关,所以我们主要关注其和安卓相关的功能。对于安卓应用来说,JEB 主要提供如下功能:

  • 可以对安卓应用程序和 Dalvik(Android 虚拟机,类似 Java 中的 JVM)字节码执行精确和快速的反编译操作。
  • 内置的分析模块可以对高度混淆的代码可以提供虚拟层次化重构,对混淆代码的分析很有帮助。
  • 可以对接 JEB API 来执行一些逆向任务,支持 Java 和 Python 来编写自动化逆向脚本。

JEB 支持 Windows、Linux、Mac 三大平台,其官网地址为 https://www.pnfsoftware.com,目前主要分为三个版本:JEB CE(社区版)、JEB Android(安卓版)、JEB Pro(专业版)。JEB CE 提供了一些基础的功能,如支持 dex 文件的反编译,支持 Intel-x86 的反编译和反汇编,但不支持 Dalvik 字节码的反编译等功能。JEB Android 则更专注于安卓,支持 dex 文件的反编译,也支持 Dalvik 字节码的反编译和反汇编,JEB Pro 则是“完全体”,支持官网所介绍的所有的功能。具体的功能对比可以参考官网的介绍:https://www.pnfsoftware.com/jeb。三个版本中,JEB CE 是免费的,JEB Android 和 JEB Pro 都是收费的,需要购买许可证才可以使用。

安装

如果从官方网站直接下载的话,一些 Android 功能是没法用的,这里建议下载社区大佬们提供的破解版,请移步:https://bbs.pediy.com/thread-268316.htm

另外这里我也准备了一个安装包,链接: https://pan.baidu.com/s/1GyMCbJwjfiNjv9zSBWcoow 提取码: e53q

备用链接(另一个版本的安装包): https://pan.baidu.com/s/1DXTqwWMrLJ-YhPb0zgZKyQ 提取码: 4m49

下载完成,解压后会得到如下的文件目录:

这里有三个运行脚本,分别适配 Windows、Linux、Mac,分别运行 jeb_wincon.bat、jeb_linux.sh、jeb_macos.sh 即可。

如 Mac 下就可以运行:

1
sh jeb_macos.sh

运行之后会出现如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Memory Usage: 981.5M allocated (144.9M used, 836.6M free) - max: 14.2G
JEB 4.3.0.202107131915 (jeb-ce) is starting...
Current directory: /usr/local/etc/jeb
Base directory: /usr/local/etc/jeb
Program directory: /usr/local/etc/jeb/bin
System: Mac OS X 11.5.2 (x86_64) en_CN
Java: Oracle Corporation 1.8.0_282
External plugin loaded: com.pnf.plugin.androidjnihelper.DynamicJNIDetectionPlugin
External plugin loaded: com.pnf.androsig.gen.AndroidSigGenPlugin
External plugin loaded: com.pnf.androsig.apply.andsig.AndroidSigApplyPlugin
External plugin loaded: com.pnf.plugin.oat.OATPlugin
External plugin loaded: com.pnf.plugin.pdf.PdfPlugin
External plugin loaded: com.pnf.diemvm.DiemIdentifier
External plugin loaded: com.pnf.diemvm.DiemDisassemblerPlugin
External plugin loaded: com.pnf.diemvm.DiemDecompilerPlugin
Checking for update...

接着就会弹出 JEB 的窗口,如图所示:

然后就可以使用了。

安装配置

jadx 是一款使用广泛的反编译工具,可以一键把 apk 文件还原成 Java 代码,使用起来简单,功能 强大,还具有一些附加功能可以辅助代码追查。

相关链接

  • GitHub:https://github.com/skylot/jadx

安装方法

Windows

直接到 GitHub 下载对应的 Release 包即可:https://github.com/skylot/jadx/releases。

下载之后直接解压即可。

解压之后会得到一个 bin 目录,进入 bin 目录直接运行 jdax 和 jadx-gui 即可,Windows 可以直接双击 jadx.bat 或 jadx-gui.bat 即可运行。

Mac

对于 Mac 来说,可以直接使用 Homebrew 安装:

1
brew install jadx

Linux

1
sudo pacman -S jadx

更多安装说明可以参考:https://github.com/skylot/jadx。

验证安装

只要 jadx 和 jadx-gui 能正常启动,就证明安装成功了。

安装配置

本节我们了解下 parsel 的安装方式。

相关链接

  • GitHub:https://github.com/scrapy/parsel
  • PyPi:https://pypi.org/project/parsel/
  • 官方文档:https://parsel.readthedocs.io/

安装方法

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install parsel

命令执行完毕之后即可完成安装。

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import parsel

如果没有错误报出,则证明库已经安装好了。

安装配置

adbutils 是 Python 中 adb 命令行的封装包。

相关链接

  • GitHub:https://github.com/openatx/adbutils
  • PyPi:https://pypi.org/project/adbutils/

安装方法

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install adbutils

命令执行完毕之后即可完成安装。

验证安装

安装完成之后,可以在 Python 命令行下测试,另外确保你的手机已经和电脑通过 USB 或无线的方式连接好了,运行如下代码:

1
2
3
4
import adbutils

adb = adbutils.AdbClient(host="127.0.0.1", port=5037)
print(adb.devices())

如果没有错误报出,而且输出了 Device 相关信息,则证明库已经安装好了。

安装配置

下面是一些群控系统服务网站(不定期更新):

掘金网安卓群控系统:https://www.54nb.com/androids/

侠客科技:https://www.xiake.vip/

智互云客:http://www.zh-auto.org/

智云控:http://www.zhiyunkong.com/

鹰眼:http://ent.mobileanjian.com/

阿云梯:https://www.ayunti.cn/

河马云:http://www.longene.com.cn/

四方来客:http://www.zhiboyk.com/

安装配置

Airtest Project 是由网易游戏推出的一款自动化测试框架,项目构成如下:

  • Airtest:一个跨平台的、基于图像识别的 UI 自动化测试框架,适用于游戏和 App,支持的平台有 Windows、Android 和 iOS,基于 Python 实现。
  • Poco:一款基于 UI 控件识别的自动化测试框架,目前支持 Unity3D、cocos2dx、Android 原生 App、iOS 原生 App 和微信小程序,也可以在其他引擎中自行接入 poco-sdk 来使用,基于 Python 实现。
  • AirtestIDE:提供了一个跨平台的 UI 自动化测试编辑器,内置了 Airtest 和 Poco 的相关插件功能,使用它能够快速简单地编写AirtestPoco代码。
  • AirLab:真机自动化云测试平台,目前提供了 Top 100 手机兼容性测试、海外云真机兼容性测试等服务。
  • 私有化手机集群技术方案:从硬件到软件,提供了企业内部私有化手机集群的解决方案。

总之,Airtest 建立了一个比较完善的自动化测试解决方案,利用 Airtest 我们能实现类似 Appium 一样可见即可爬的爬取,相对 Appium 个人认为更加简单易用。

相关资源

  • 官网:https://airtest.netease.com/
  • 文档:https://airtest.doc.io.netease.com/

安装

要安装 Airtest,我们可能需要安装多个组件,比如 AirtestIDE、Poco、Airtest 库等。

对于 Airtest IDE 来说,请参考 https://airtest.doc.io.netease.com/IDEdocs/getting_started/AirtestIDE_install/ 里面的说明进行安装。

安装完 Airtest IDE 之后,它还会安装一个 Python 环境,同时该 Python 环境还附带安装了 Airtest Python 库和 Poco Python 库,不过这个 Python 环境被打包在 AirtestIDE 里面,和系统里面装的 Python 并不是同一个,所以,推荐直接使用 pip3 将 Airtest Python 库和 Poco Python 库安装到系统的 Python 环境下。

Airtest Python 库的安装命令如下:

1
pip3 install airtest

Poco Python 库的安装命令如下:

1
pip3 install pocoui

安装完成之后,可以在 AirtestIDE 中把默认 Python 环境更换成系统的 Python 环境,而不再是 AirtestIDE 附带的 Python 环境,打开 AirtestIDE 菜单的选项 - 设置,可以看到如下配置:

可以看到这里有一个选项叫做 “自定义 Python.exe 路径”,将其修改为系统的 Python 路径即可,具体的设置方法可以进一步参考:https://airtest.doc.io.netease.com/IDEdocs/3.4run_script/0_run_script/#4

安装好了 Airtest IDE、Airtest 和 Poco 的 Python 库之后,最后我们还需要准备一台 Android 真机或者模拟器,如果是真机还需要通过 USB 和 PC 相连,确保 adb 能够正常连接到手机,具体的设置方法可以参考:https://airtest.doc.io.netease.com/tutorial/1_quick_start_guide/#_4

安装配置

简单的说 Node.js 就是运行在服务端的 JavaScript。

Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。

Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,性能非常好。

如果你是一个前端程序员,你不懂得像 PHP、Python 或 Ruby 等动态编程语言,然后你想创建自己的服务,那么 Node.js 是一个非常好的选择。

Node.js 是运行在服务端的 JavaScript,如果你熟悉 Javascript,那么你将会很容易的学会 Node.js。

相关链接

  • 官网:https://nodejs.org/
  • 文档:https://nodejs.org/en/docs/
  • 中文网:http://nodejs.cn/
  • GitHub:https://github.com/nodejs/node
  • 基础教程:https://www.runoob.com/nodejs/nodejs-tutorial.html

安装方法

由于 Node.js 频繁更新,请直接移步 Node.js 中文网介绍查看安装说明即可:http://nodejs.cn/learn/how-to-install-nodejs。

另外,个人也非常推荐使用 nvm 来安装 Node.js,有了 nvm,我们可以方便地管理多个 Node.js 版本,其实有点类似于 Python 虚拟环境的感觉,具体的安装说明可以参考:https://github.com/nvm-sh/nvm。

安装配置

本文介绍代理软件的配置,由于内容可能相对敏感,所以这里仅提供外链。

个人比较推荐的是:konan 点 ml,里面有很多套餐,同时教你怎么在各个平台(Windows、Mac、Linux、Android、iOS)上配置和运行对应的代理软件。

运行代理软件后会在本机创建 HTTP 或 SOCKS 代理服务,所以代理地址一 般是 127.0.0.1:<port> 这样的格式,不同代理软件使用的端口可能不同。

我的本机上安装着一个代理软件,它会在 7890 端口上创建 HTTP 代理服务,在 7891 端口上创建 SOCKS 代理服务,因此 HTTP 代理地址为 127.0.0.1:7890,SOCKS 代理地址为 127.0.0.1:7891,只要 设置了这个代理,就可以成功将本机 IP 切换到代理软件连接的服务器的 IP。

安装配置

Pillow 是 Python 的一个支持图像处理的库,本节我们了解下 Pillow 的安装方式。

相关链接

  • GitHub:https://github.com/python-pillow/Pillow
  • PyPi:https://pypi.org/project/Pillow/
  • 官方文档:https://pillow.readthedocs.io/en/stable/

安装方法

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install Pillow

命令执行完毕之后即可完成安装。

具体的 Python 版本支持可以参考 https://pillow.readthedocs.io/en/latest/installation.html 的说明,如图所示:

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import pillow

如果没有错误报出,则证明库已经安装好了。

安装配置

本节我们了解下 opencv-python 的安装方式。

相关链接

  • GitHub:https://github.com/opencv/opencv-python
  • PyPi:https://pypi.org/project/opencv-python/
  • 文档:https://docs.opencv.org/master/

安装方法

pip 安装

推荐使用 pip3 安装,命令如下:

1
pip3 install opencv-python

命令执行完毕之后即可完成安装。

另外,如果想要额外安装一些 contrib 模块的话,可以选择全量安装:

1
pip3 install opencv-contrib-python

更多安装说明可以参考:https://github.com/opencv/opencv-python。

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import cv2

如果没有错误报出,则证明库已经安装好了。

安装配置

PyTorch 是当今非常火爆的深度学习框架。

相关链接

  • 官网:https://pytorch.org/
  • GitHub:https://github.com/pytorch/pytorch
  • 官方文档:https://pytorch.org/docs/stable/index.html

安装方法

PyTorch 适配的平台有很多,官方也提供了安装教程,可以参考 https://pytorch.org/get-started/locally/,

打开之后可以看到有好多选项配置,让我们选择我们当前的环境是怎样的,如图所示:

比如这里我们可以选择版本、操作系统、包工具、开发语言、GPU 环境等等,选择之后,最后就会显示一条命令,比如这里的命令就是:

1
pip3 install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html

这样的话我们只需要运行这条命令,那就可以在 Linux 上使用 pip 安装适配 CUDA 11.1 的 PyTorch 库了。

更详细的安装配置可以参考:https://pytorch.org/get-started/locally/。

安装配置

Playwright 是微软开源的自动化测试工具,也可以用作网络爬虫。

相关链接

  • GitHub:https://github.com/microsoft/playwright
  • 官方文档:https://playwright.dev/python/docs/intro

安装方法

pip 安装

推荐使用 pip3 安装,命令如下:

1
2
3
pip3 install --upgrade pip
pip3 install playwright
playwright install

命令执行完毕之后即可完成安装,其中最后一条命令,Playwright 会完成一些初始化的工作,比如下载必要的浏览器和配置对应驱动、环境变量等。

conda 安装

也可以使用 conda 安装,安装命令如下:

1
2
3
4
conda config --add channels conda-forge
conda config --add channels microsoft
conda install playwright
playwright install

效果是一样的。

验证安装

安装完成之后,可以在 Python 命令行下测试。

1
2
$ python3
>>> import playwright

如果没有错误报出,则证明库已经安装好了。

安装配置

MongoDB 是由 C++ 语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似 Json 对象,它的字段值可以包含其他文档,数组及文档数组,非常灵活。

MongoDB 支持多种平台,包括 Windows、Linux、Mac OS、Solaris 等,在其官方网站均可找到对应的安装包,https://www.mongodb.com/download-center

本节我们来看下它的安装过程。

相关链接

  • 官方网站:https://www.mongodb.com
  • 官方文档:https://docs.mongodb.com
  • GitHub:https://github.com/mongodb
  • 中文教程:http://www.runoob.com/mongodb/mongodb-tutorial.html

安装方法

Windows 下的安装

直接在官网下载安装包即可,链接为:https://www.mongodb.com/try/download/community,页面如图所示:

直接点击 Download 下载 msi 安装包即可。

下载完成之后双击开始安装,如图所示:

后面的安装模式选择 Complete 即可,如图所示:

点击之后可以看到一些 MongoDB 安装配置,如 data 文件夹、log 文件夹都在哪里,还有是否把 MongoDB 安装成系统服务,如图所示:

一直点击下一步安装即可。

安装完毕之后 MongoDB 也会被注册成一个 Windows 服务,而且已经启动,如图所示:

这里我们可以控制服务的开关,即 MongoDB 服务的开关。

这样 Windows 下 MongoDB 配置就完成了。

Linux 下的安装

完整的安装教程请参考:https://docs.mongodb.com/manual/administration/install-on-linux/,如下内容仅作参考。

在这里以 MongoDB 5.0 为例说明 MongoDB 的安装过程。

Ubuntu

首先导入 MongoDB 的 GPG Key:

1
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -

随后创建 apt-get 源列表,各个系统版本对应的命令如下:

  • Ubuntu 20.04
1
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
  • Ubuntu 18.04
1
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list

随后更新 apt-get 源:

1
sudo apt-get update

之后安装 MongoDB 即可:

1
sudo apt-get install -y mongodb-org

安装完成之后运行 MongoDB,命令如下:

1
sudo systemctl start mongod

运行命令之后 MongoDB 就在 27017 端口上运行了,数据文件会保存在 /data/db 路径下。

一般我们在 Linux 上配置 MongoDB 都是为了远程连接使用的,所以在这里还需要配置一下 MongoDB 的远程连接和用户名密码:

接着我们进入到 MongoDB 命令行:

1
mongo --port 27017

现在我们就已经进入到 MongoDB 的命令行交互模式下了,在此模式下运行如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
> use admin
switched to db admin
> db.createUser({user: 'admin', pwd: 'admin123', roles: [{role: 'root', db: 'admin'}]})
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}

这样我们就创建了一个用户名为 admin,密码为 admin123 的用户,赋予最高权限。

随后需要修改 MongoDB 的配置文件,

执行如下命令:

1
sudo vi /etc/mongod.conf

修改 net 部分为:

1
2
3
net:
port: 27017
bindIp: 0.0.0.0

这样配置后 MongoDB 可被远程访问。

另外还需要添加如下权限认证配置,直接添加如下内容到配置文件:

1
2
security:
authorization: enabled

配置完成之后我们需要重新启动 MongoDB 服务,命令如下:

1
sudo service mongod restart

这样远程连接和权限认证就配置完成了。

CentOS、RedHat

首先添加 MongoDB 源:

1
sudo vi /etc/yum.repos.d/mongodb-org.repo

修改为如下内容保存:

1
2
3
4
5
6
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc

然后执行 yum 命令安装:

1
sudo yum install mongodb-org

启动 MongoDB 服务:

1
sudo systemctl start mongod

停止和重新加载 MongoDB 服务:

1
2
sudo systemctl stop mongod
sudo systemctl reload mongod

有关远程连接和认证配置可以参考上文,方式是相同的。

更多 Linux 发行版的 MongoDB 安装方式可以参考官方文档:https://docs.mongodb.com/manual/administration/install-on-linux/。

Mac 下的安装

完整安装说明请参考:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/,如下内容仅作参考。

首先确保一些依赖库已经正确安装了,运行如下命令:

1
xcode-select --install

推荐使用 Homebrew 安装,执行 brew 命令即可:

1
2
brew tap mongodb/brew
brew install mongodb-community@5.0

然后创建一个新文件夹 /data/db,用于存放 MongoDB 数据。

启动 MongoDB 服务:

1
brew services start mongodb-community@5.0

这样就启动了 MongoDB 服务。

停止、重启 MongoDB 服务的命令:

1
2
brew services stop mongodb-community@5.0
brew services restart mongodb-community@5.0

可视化工具

在这里推荐一个可视化工具 RoboMongo/Robo 3T,使用简单,功能强大,官方网站:https://robomongo.org/,三大平台都有支持,下载链接:https://robomongo.org/download

另外还有一个简单易用的可视化工具,Studio 3T,同样具有方便的图形化管理,官方网站:https://studio3t.com,同样支持三大平台,下载链接:https://studio3t.com/download/

安装配置

Splash 是一个 JavaScript 渲染的工具,本节来介绍一下它的安装方式。

准备工作

Splash 建议的安装方式是通过 Docker,安装是通过 Docker 安装,在这之前请确保已经正确安装好了 Docker,可以参考:https://setup.scrape.center/docker。

安装

有了 Docker,只需要一键启动 Splash 即可,命令如下:

1
docker run -p 8050:8050 scrapinghub/splash

安装完成之后会有类似的输出结果:

这样就证明 Splash 已经在 8050 端口上运行了。

这时我们打开:http://localhost:8050 即可看到 Splash 的主页,如图所示:

当然 Splash 也可以直接安装在远程服务器上,我们在服务器上运行以守护态运行 Splash 即可,命令如下:

1
docker run -d -p 8050:8050 scrapinghub/splash

在这里多了一个 -d 参数,它代表将 Docker 容器以守护态运行,这样在中断远程服务器连接后不会终止 Splash 服务的运行。

完毕!

安装配置

MySQL 是一个轻量级的关系型数据库,以表的形式来存储数据,本节我们来了解下它的安装方式。

相关链接

  • 官方网站:https://www.mysql.com/cn
  • 下载地址:https://www.mysql.com/cn/downloads
  • 中文教程:http://www.runoob.com/mysql/mysql-tutorial.html

Windows 下的安装

对于 Windows 来说,最安全稳妥的方式就是直接到官网下载安装包进行安装。可以访问官方网站下载,https://dev.mysql.com/downloads/mysql/,如图所示:

点击最大的 MySQL Installer 即可,然后选择第二个选项 - mysql-installer-community-8.0.26.0.msi 下载即可,如图所示:

此时会要求登录 MySQL 的账号,这里可以登录或者选择直接下载,如图所示:

下载之后会得到一个 msi 后缀的安装文件,直接双击运行安装,直接选择默认选项点击下一步安装即可,如图所示:

这里直接选择默认选项即可,然后点下一步。

下一页需要确认下需要安装的内容,如图所示:

保持默认配置即可,然后点击 Execute 即可。

安装完成之后 MySQL Installer 会引导我们进行一些配置,如图所示:

此页面需要配置一些网络环境和端口,保持默认即可,点击下一步。

下一步是使用怎样的密码加密方式,如图所示:

这里也是使用默认配置即可,可以点击下一步。

下一步就是配置用户名和密码,这里我们可以配置 Root 账户的密码,也可以自定义用户来配置,如图所示:

输入密码之后,点击下一步即可。

接下来就是服务的配置,这里默认配置是把 MySQL 服务配置成 Windows 服务中,而且在每次系统启动的时候都自动启动 MySQL 服务,如图所示:

如果我们想要每次开机的时候都自动启用 MySQL 服务,那我们可以勾选上 Start the MySQL Server at System Startup,否则勾选,配置好了之后点击下一步即可。

最后一步就是应用刚才的服务,使得服务生效,如图所示:

这里我们直接点击 Execute 即可。

安装之后我们会发现刚才还附带安装了一个 MySQL Workbench,就是 MySQL 可视化管理的客户端,如图所示:

这里可以发现已经添加了一个本地的 MySQL 服务的连接,双击即可连接。

连接之后我们还可以选中某个数据库的某个表,选择查看数据的选项 Select Rows,查看表中中的前 100 条数据,这样数据就被查询出来了,如图所示:

安装完成之后我们可以在电脑-管理-服务页面开启和关闭 MySQL 服务,如图所示:

如果启动了 MySQL 服务,那么我们就可以使用它来进行数据存储了。

Linux 下的安装

下面仍然分不同平台进行介绍。

Ubuntu、Debian、Deepin

直接使用 apt-get 命令即可下载安装:

1
2
sudo apt-get update
sudo apt-get install -y mysql-server mysql-client

在安装过程中会提示输入用户名密码,输入之后等待片刻即可完成安装。

启动、关闭、重启 MySQL 服务命令:

1
2
3
sudo service mysql start
sudo service mysql stop
sudo service mysql restart

CentOS、RedHat

完整的安装说明可以参考:https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7

以 MySQL 5.7 的 Yum 源为例,如果需要更高版本可以另寻,安装命令如下:

1
2
3
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install -y mysql mysql-server

运行如上命令即可完成安装,初始密码为空。接下来需要启动 MySQL 服务。

启动 MySQL 服务命令:

1
sudo systemctl start mysqld

停止、重启命令:

1
2
sudo systemctl stop mysqld
sudo systemctl restart mysqld

以上我们就完成了 Linux 下 MySQL 的安装,安装完成之后可以修改密码,可以执行如下命令:

1
mysql -uroot -p

输入密码后进入 MySQL 命令行模式。

1
2
3
use mysql;
UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';
FLUSH PRIVILEGES;

命令中 newpass 即为修改的新的 MySQL 密码,请自行替换。

由于 Linux 一般会作为服务器使用,为了使得 MySQL 可以被远程访问,我们需要修改 MySQL 的配置文件,配置文件路径一般为 /etc/mysql/my.cnf。

如使用 vi 进行修改的命令如下:

1
vi /etc/mysql/my.cnf

取消此行的注释:

1
bind-address = 127.0.0.1

此行限制了 MySQL 只能本地访问而不能远程访问,取消注释即可解除此限制。

修改完成之后重启 MySQL 服务,这样 MySQL 就可以被远程访问了。

到此为止,Linux 下安装 MySQL 的过程结束。

Mac 下的安装

推荐使用 Homebrew 安装,执行 brew 命令即可。

1
brew install mysql

启动、停止、重启 MySQL 服务的命令:

1
2
3
sudo mysql.server start
sudo mysql.server stop
sudo mysql.server restart

Mac 一般不会作为服务器使用,如果要想取消本地 host 绑定,同样修改 my.cnf 文件,然后重启服务即可。

安装配置

Appium 是移动端的自动化测试工具,类似于前面所说的 Selenium,利用它我们可以驱动 Android、iOS 等设备完成自动化测试,比如模拟点击、滑动、输入等操作,其官方网站为:http://appium.io/,本节来了解一下 Appium 的安装方式。

相关链接

  • GitHub:https://github.com/appium/appium
  • 官方网站:http://appium.io
  • 官方文档:http://appium.io/introduction.html
  • 下载链接:https://github.com/appium/appium-desktop/releases
  • Python Client:https://github.com/appium/python-client

安装 Appium

首先我们需要安装 Appium,Appium 负责驱动移动端来完成一系列操作,对 iOS 设备来说,它使用苹果的 UIAutomation 来实现驱动,对于 Android 来说,它使用 UiAutomator 和 Selendroid 来实现驱动。

同时 Appium 也相当于一个服务器,我们可以向 Appium 发送一些操作指令,Appium 就会根据不同的指令对移动设备进行驱动,完成不同的动作。

安装 Appium 有两种方式,一种是直接下载安装包 Appium Desktop 来安装,另外一种是通过 Node.js 来安装,下面我们各自介绍一下两种安装方式。

Appium Desktop

Appium Desktop 支持全平台的安装,我们直接从 GitHub 的 Releases 里面安装即可,链接为:https://github.com/appium/appium-desktop/releases,目前的最新版本是 1.22,最新版本以网站为准,下载页面如图所示:

Windows 平台可以下载 exe 安装包如 Appium-Server-GUI-windows-1.22.0.exe,Mac 平台可以下载 dmg 安装包如 Appium-Server-GUI-mac-1.22.0.dmg,Linux 平台可以选择下载源码,但是更推荐用下文的 Node.js 安装方式。

安装完成之后运行之后页面如图所示:

如果出现此页面则证明安装成功。

Node.js

首先需要安装 Node.js,具体的安装方式可以参见:http://www.runoob.com/nodejs/nodejs-install-setup.html,安装完成之后就可以使用 npm 命令了。

接下来使用 npm 命令全局安装 Appium 即可,命令如下:

1
npm install -g appium

等待命令执行执行完成即可,这样就成功安装了 Appium。

Android 开发环境配置

如果我们要使用 Android 设备做 App 抓取的话,还需要下载和配置 Android SDK,在这里推荐直接安装 Android Studio,其下载地址为:https://developer.android.com/studio/index.html?hl=zh-cn,下载之后直接安装即可。

完成之后我们还需要下载 Android SDK,直接打开首选项里面的 Android SDK 设置页面,勾选要安装的 SDK 版本,点击确定即可开始下载和安装勾选的 SDK 版本,如图所示:

另外还需要配置一下环境变量,添加 ANDROID_HOME 为 Android SDK 所在路径,然后再添加 SDK 文件夹下的 tools 和 platform-tools 文件夹到 PATH 中。

更详细的配置可以参考 Android Studio 的官方文档:https://developer.android.com/studio/intro/index.html

iOS 开发环境配置

首先需要声明的是,Appium 是一个做自动化测试的工具,用它来测试我们自己开发的 App 是完全没问题的,它携带的是开发者证书(Development Certificate)。但如果我们想拿 iOS 设备来做数据爬取的话又是另外一回事了,一般我们做数据爬取都是使用现有的 APP,在 iOS 上一般都是通过 App Store 下载的,它携带的是分发证书(Distribution Certificate),而携带这种证书的应用都是禁止被测试的,所以只有获取 ipa 安装包再重新签名之后才可以被 Appium 测试,具体的方法不再展开阐述,如感兴趣可以搜索相关资料。

因此在这里推荐直接使用 Android 来进行测试,如果你可以完成上述操作重签名操作,那么可以参考如下内容配置 iOS 开发环境。

Appium 驱动 iOS 设备必须要在 Mac 下进行,Windows 和 Linux 是平台是无法完成的,下面只介绍一下 Mac 平台的相关配置。

Mac 平台需要的配置如下:

  • Mac OS X 10.12 及更高版本
  • XCode 8 及更高版本

配置满足要求之后执行如下命令即可配置开发依赖的一些库和工具:

1
xcode-select --install

这样 iOS 部分开发环境就配置完成了,我们就可以用 iOS 模拟器来进行测试和数据抓取了。

如果想要用真机进行测试和数据抓取,还需要额外配置一下其他的环境,可以参考:https://github.com/appium/appium/blob/master/docs/en/appium-setup/real-devices-ios.md

结语

以上是 Appium 开发环境的搭建,在后文我们会用它来抓取微信朋友圈的内容。

安装配置

Docker 是一种容器技术,它可以将应用和环境等进行打包,形成一个独立的,类似于 iOS 的 APP 形式的「应用」,这个应用可以直接被分发到任意一个支持 Docker 的环境中,通过简单的命令即可启动运行。Docker 是一种最流行的容器化实现方案。和虚拟化技术类似,它极大的方便了应用服务的部署;又与虚拟化技术不同,它以一种更轻量的方式实现了应用服务的打包。使用 Docker 可以让每个应用彼此相互隔离,在同一台机器上同时运行多个应用,不过他们彼此之间共享同一个操作系统。Docker 的优势在于,它可以在更细的粒度上进行资源的管理,也比虚拟化技术更加节约资源。

本段参考:DaoCloud 官方文档

对于爬虫来说,如果我们需要大规模部署爬虫系统的话,用 Docker 会大大提高效率,工欲善其事,必先利其器。

本节来介绍一下三大平台下 Docker 的安装方式。

相关链接

  • 官方网站:https://www.docker.com
  • GitHub:https://github.com/docker
  • Docker Hub:https://hub.docker.com
  • 官方文档:https://docs.docker.com
  • DaoCloud:http://www.daocloud.io
  • 中文社区:http://www.docker.org.cn
  • 中文教程:http://www.runoob.com/docker/docker-tutorial.html
  • 推荐书籍:https://yeasy.gitbooks.io/docker_practice

Windows 下的安装

如果你的系统是 Windows10 64 位,那么推荐使用 Docker for Windows,直接从 Docker 官方网站下载最新的 Docker for Windows 安装包即可:https://docs.docker.com/docker-for-windows/install/

如果不是 Windows10 64 位系统,则可以下载 Docker Toolbox:https://docs.docker.com/toolbox/toolbox_install_windows/

安装包下载之后直接双击安装即可,安装详细过程可以参考文档说明,安装完成之后,进入命令行。

运行 Docker 命令测试:

1
docker

运行结果如图所示:

如果出现类似上述输出就证明 Docker 安装成功了。

Linux 下的安装

详细的分步骤的安装说明可以参见官方文档:https://docs.docker.com/engine/installation/linux/ubuntu/

在官方文档中详细说明了不同 Linux 系统的安装方法,安装流程根据文档一步步执行即可安装成功。

但是为了使得安装更加方便,Docker 官方还提供了一键安装脚本,使用它会使得安装更加便捷,不用再去一步步执行命令安装了,在此介绍一下一键脚本安装方式。

首先是 Docker 官方提供的安装脚本,相比其他脚本,官方提供的一定更靠谱,安装命令如下:

1
curl -sSL https://get.docker.com/ | sh

只要执行如上一条命令,等待一会儿 Docker 便会安装完成,非常方便。

但是官方脚本安装有一个缺点,那就是慢,也可能下载超时,所以为了加快下载速度,我们可以使用国内的镜像来安装,所以在这里还有阿里云和 DaoCloud 的安装脚本。

阿里云安装脚本:

1
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

DaoCloud 安装脚本:

1
curl -sSL https://get.daocloud.io/docker | sh

两个脚本可以任选其一,速度都非常不错。

等待脚本执行完毕之后,就可以使用 Docker 相关命令了,如运行测试 Hello World 镜像:

1
docker run hello-world

运行结果:

1
2
3
4
5
6
7
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.

如果出现上文类似提示内容则证明 Docker 可以正常使用了。

Mac 下的安装

Mac 平台同样有两种选择,Docker for Mac 和 Docker Toolbox。

Docker for Mac 要求系统为 OS X EI Captain 10.11 或更新,至少 4GB 内存,如果你的系统满足此要求,则强烈建议安装 Docker for Mac。

可以使用 HomeBrew 安装,安装命令如下:

1
brew cask install docker

另外也可以手动下载安装包安装,安装包下载地址为:https://download.docker.com/mac/stable/Docker.dmg

下载完成之后直接双击安装包,然后将程序拖动到应用程序中即可。

点击程序图标运行 Docker,会发现在菜单栏中出现了 Docker 的图标,如图中的第三个小鲸鱼图标:

点击图标展开菜单之后,再点击 Start 按钮即可启动 Docker,启动成功便会提示 Docker is running,如图所示:

随后我们就可以在命令行下使用 Docker 命令了。

可以使用如下命令测试运行:

1
sudo docker run hello-world

运行结果如图所示:

如果出现类似输出则证明 Docker 已经成功安装。

如果系统不满足要求,可以下载 Docker Toolbox,其安装说明为:https://docs.docker.com/toolbox/overview/

关于 Docker for Mac 和 Docker Toolbox 的区别,可以参见:https://docs.docker.com/docker-for-mac/docker-toolbox/

镜像加速

安装好 Docker 之后,在运行测试命令时,我们会发现它首先会下载一个 Hello World 的镜像,然后将其运行,但是下载速度有时候会非常慢,这是因为它默认还是从国外的 Docker Hub 下载的,所以为了提高镜像的下载速度,我们还可以使用国内镜像来加速下载,所以这就有了 Docker 加速器一说。

推荐的 Docker 加速器有 DaoCloud 和阿里云。

DaoCloud:https://www.daocloud.io/mirror

阿里云:https://cr.console.aliyun.com/#/accelerator

不同平台的镜像加速方法配置可以参考 DaoCloud 的官方文档:http://guide.daocloud.io/dcs/daocloud-9153151.html

配置完成之后,可以发现镜像的下载速度会快非常多。

以上便是 Docker 的安装方式说明。

安装配置

mitmproxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler、Charles 的功能,只不过它是一个控制台的形式操作。

同时 mitmproxy 还有两个关联组件,一个是 mitmdump,它是 mitmproxy 的命令行接口,利用它我们可以对接 Python 脚本,用 Python 实现监听后的处理。另一个是 mitmweb,它是一个 Web 程序,通过它我们可以清楚地观察到 mitmproxy 捕获的请求。

本节我们来了解一下 mitmproxy、mitmdump、mitmweb 的安装方式。

相关链接

  • GitHub:https://github.com/mitmproxy/mitmproxy
  • 官方网站:https://mitmproxy.org
  • PyPi:https://pypi.python.org/pypi/mitmproxy
  • 官方文档:http://docs.mitmproxy.org
  • mitmdump 脚本:http://docs.mitmproxy.org/en/stable/scripting/overview.html
  • 下载地址:https://github.com/mitmproxy/mitmproxy/releases
  • DockerHub:https://hub.docker.com/r/mitmproxy/mitmproxy

pip 安装

最简单的安装方式还是使用 pip,直接执行如下命令即可安装:

1
pip3 install mitmproxy

这是最简单和通用的安装方式,执行完毕之后即可完成 mitmproxy 的安装,另外还安装了 mitmdump、mitmweb 两个组件,如果不想用此种方式安装也可以选择下文列出的专门针对各个平台的安装方式或者 Docker 安装方式。

Windows 下的安装

可以到 https://mitmproxy.org/ 获取安装包,如图所示:

下载之后直接双击安装包即可安装。

注意在 Windows 上不支持 mitmproxy 的控制台接口,但是可以使用 mitmdump 和 mitmweb。

Linux 下的安装

Linux 可以下载编译好的二进制包,此发行包一般是最新版本,它包含了最新版本的 mitmproxy 和内置的 Python3 环境还有最新的 OpenSSL 环境。

如果你的环境里没有 Python3 和 OpenSSL 环境,建议使用此种方式安装,如图所示,下载安装包即可:

下载之后需要解压然后将其配置到环境变量。

1
2
tar -zxvf mitmproxy-*-linux.tar.gz
sudo mv mitmproxy mitmdump mitmweb /usr/bin

这样就可以将三个可执行文件移动到了 /usr/bin 目录,而一般 /usr/bin 目录都已经配置在了环境变量下,所以接下来我们就可以直接调用这三个工具了。

Mac 下的安装

Mac 的安装非常简单,使用 HomeBrew 即可,命令如下:

1
brew install mitmproxy

执行命令后即可完成 mitmproxy 的安装。

Docker 安装

mitmproxy 也支持 Docker,其 Docker Hub 的地址为:https://hub.docker.com/r/mitmproxy/mitmproxy/

Docker 下 mitmproxy 的安装命令为:

1
docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy mitmdump

这样就在 8080 端口上启动了 mitmproxy 和 mitmdump。

如果想要获取 CA 证书,可以选择挂载磁盘选项,命令如下:

1
docker run --rm -it -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy -p 8080:8080 mitmproxy/mitmproxy mitmdump

这样可以在 ~/.mitmproxy 目录找到 CA 证书。

另外还可以在 8081 端口上启动 mitmweb,命令如下:

1
docker run --rm -it -p 8080:8080 -p 127.0.0.1:8081:8081 mitmproxy/mitmproxy mitmweb

更多启动方式可以参考 Docker Hub 的安装说明。

证书配置

对于 mitmproxy 来说,如果想要截获 HTTPS 请求,我们就需要设置证书,mitmproxy 在安装后会提供一套 CA 证书,只要客户端信任了 mitmproxy 提供的证书,我们就可以通过 mitmproxy 获取 HTTPS 请求的具体内容,否则 mitmproxy 是无法解析 HTTPS 请求的。

首先运行一下命令产生 CA 证书,启动 mitmdump 即可:

1
mitmdump

这样即可启动 mitmdump,接下来我们就可以在用户目录下的 .mitmproxy 目录里面找到 CA 证书,如图所示:

证书一共五个,下面是对这五个证书的说明:

名称 描述
mitmproxy-ca.pem PEM 格式的证书私钥
mitmproxy-ca-cert.pem PEM 格式证书,适用于大多数非 Windows 平台
mitmproxy-ca-cert.p12 PKCS12 格式的证书,适用于 Windows 平台
mitmproxy-ca-cert.cer 与 mitmproxy-ca-cert.pem 相同,只是改变了后缀,适用于部分 Android 平台
mitmproxy-dhparam.pem PEM 格式的秘钥文件,用于增强 SSL 安全性

下面我们介绍一下 Windows、Mac、iOS、Android 平台下的证书配置过程。

Windows

双击 mitmproxy-ca.p12,就会出现导入证书的引导页,如图所示:

直接点击下一步即可,接下来会出现密码设置提示,如图所示:

不需要设置密码,直接点击下一步即可。

接下来需要选择证书的存储区域,如图所示:

点击第二个选项“将所有证书放入下列存储”,然后点击浏览,再选择证书存储位置为“受信任的根证书颁发机构”,确定,点击下一步。

最后如果有安全警告均点击“是”即可,如图所示:

这样就配置完成 Windows 下信任 CA 证书了。

Mac

Mac 下双击 mitmproxy-ca-cert.pem 即可弹出钥匙串管理页面,然后找到 mitmproxy 证书,点击打开其设置选项,选择始终信任即可,如图所示:

这样就配置完成 Mac 下信任 CA 证书了。

iOS

将 mitmproxy-ca-cert.pem 文件发送到 iPhone 上,推荐使用邮件的方式发送,iPhone 上可以直接点击附件并识别安装,如图所示:

点击之后会跳到安装描述文件的页面,点击右上角的安装按钮即可安装,此处会有警告提示,如图所示:

继续点击右上角的安装即可,安装成功之后会有已安装的提示,如图所示:

如果你的 iOS 版本是 10.3 以下的话,此处信任 CA 证书的流程就已经完成了。

如果你的 iOS 版本是 10.3 及以上,还需要在设置->通用->关于本机->证书信任设置将证书添加完全信任,如图所示:

在这里将 mitmproxy 的完全信任开关打开即可。

这样 iOS 上配置信任 CA 证书的流程就结束了。

Android

Android 手机同样需要将证书 mitmproxy-ca-cert.pem 文件发送到手机上,例如直接拷贝文件。

接下来点击证书便会出现一个提示窗口,如图所示:

这时输入证书的名称,然后点击确定即可完成安装。

结语

本节我们了解了 mitmproxy、mitmdump、mitmweb 的安装方式。

安装配置

安装好了 Scrapyd 之后,我们可以直接请求它提供的 API 即可获取当前主机的 Scrapy 任务运行状况。

如某台主机的 IP 为 192.168.1.1,则可以直接运行如下命令获取当前主机的所有 Scrapy 项目:

1
curl http://localhost:6800/listprojects.json

运行结果:

1
{"status": "ok", "projects": ["myproject", "otherproject"]}

返回结果是 JSON 字符串,通过解析这个字符串我们便可以得到当前主机所有项目。

但是用这种方式来获取任务状态还是有点繁琐,所以 ScrapydAPI 就为它做了一层封装,下面我们来看下它的安装方式。

相关链接

  • GitHub:https://pypi.python.org/pypi/python-scrapyd-api/
  • PyPi:https://pypi.python.org/pypi/python-scrapyd-api
  • 官方文档:http://python-scrapyd-api.readthedocs.io/en/latest/usage.html

pip 安装

推荐使用 Pip 安装,命令如下:

1
pip install python-scrapyd-api

验证安装

安装完成之后便可以使用 Python 来获取主机状态了,所以如上的操作便可以用 Python 代码实现:

1
2
3
from scrapyd_api import ScrapydAPI
scrapyd = ScrapydAPI('http://localhost:6800')
print(scrapyd.list_projects())

运行结果:

1
["myproject", "otherproject"]

这样我们便可以用 Python 直接来获取各个主机上 Scrapy 任务的运行状态了。