下面是一些群控系统服务网站(不定期更新):
掘金网安卓群控系统:https://www.54nb.com/androids/
智云控:http://www.zhiyunkong.com/
鹰眼:http://ent.mobileanjian.com/
下面是一些群控系统服务网站(不定期更新):
掘金网安卓群控系统:https://www.54nb.com/androids/
智云控:http://www.zhiyunkong.com/
鹰眼:http://ent.mobileanjian.com/
Airtest Project 是由网易游戏推出的一款自动化测试框架,项目构成如下:
Airtest和Poco代码。总之,Airtest 建立了一个比较完善的自动化测试解决方案,利用 Airtest 我们能实现类似 Appium 一样可见即可爬的爬取,相对 Appium 个人认为更加简单易用。
要安装 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。
由于 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 的安装方式。
推荐使用 pip3 安装,命令如下:
1 |
pip3 install Pillow |
命令执行完毕之后即可完成安装。
具体的 Python 版本支持可以参考 https://pillow.readthedocs.io/en/latest/installation.html 的说明,如图所示:

安装完成之后,可以在 Python 命令行下测试。
1 |
$ python3 |
如果没有错误报出,则证明库已经安装好了。
本节我们了解下 opencv-python 的安装方式。
推荐使用 pip3 安装,命令如下:
1 |
pip3 install opencv-python |
命令执行完毕之后即可完成安装。
另外,如果想要额外安装一些 contrib 模块的话,可以选择全量安装:
1 |
pip3 install opencv-contrib-python |
更多安装说明可以参考:https://github.com/opencv/opencv-python。
安装完成之后,可以在 Python 命令行下测试。
1 |
$ python3 |
如果没有错误报出,则证明库已经安装好了。
PyTorch 是当今非常火爆的深度学习框架。
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 是微软开源的自动化测试工具,也可以用作网络爬虫。
推荐使用 pip3 安装,命令如下:
1 |
pip3 install --upgrade pip |
命令执行完毕之后即可完成安装,其中最后一条命令,Playwright 会完成一些初始化的工作,比如下载必要的浏览器和配置对应驱动、环境变量等。
也可以使用 conda 安装,安装命令如下:
1 |
conda config --add channels conda-forge |
效果是一样的。
安装完成之后,可以在 Python 命令行下测试。
1 |
$ python3 |
如果没有错误报出,则证明库已经安装好了。
MongoDB 是由 C++ 语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似 Json 对象,它的字段值可以包含其他文档,数组及文档数组,非常灵活。
MongoDB 支持多种平台,包括 Windows、Linux、Mac OS、Solaris 等,在其官方网站均可找到对应的安装包,https://www.mongodb.com/download-center
本节我们来看下它的安装过程。
直接在官网下载安装包即可,链接为:https://www.mongodb.com/try/download/community,页面如图所示:

直接点击 Download 下载 msi 安装包即可。
下载完成之后双击开始安装,如图所示:

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

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

一直点击下一步安装即可。
安装完毕之后 MongoDB 也会被注册成一个 Windows 服务,而且已经启动,如图所示:

这里我们可以控制服务的开关,即 MongoDB 服务的开关。
这样 Windows 下 MongoDB 配置就完成了。
完整的安装教程请参考:https://docs.mongodb.com/manual/administration/install-on-linux/,如下内容仅作参考。
在这里以 MongoDB 5.0 为例说明 MongoDB 的安装过程。
首先导入 MongoDB 的 GPG Key:
1 |
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add - |
随后创建 apt-get 源列表,各个系统版本对应的命令如下:
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 |
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 |
> use admin |
这样我们就创建了一个用户名为 admin,密码为 admin123 的用户,赋予最高权限。
随后需要修改 MongoDB 的配置文件,
执行如下命令:
1 |
sudo vi /etc/mongod.conf |
修改 net 部分为:
1 |
net: |
这样配置后 MongoDB 可被远程访问。
另外还需要添加如下权限认证配置,直接添加如下内容到配置文件:
1 |
security: |
配置完成之后我们需要重新启动 MongoDB 服务,命令如下:
1 |
sudo service mongod restart |
这样远程连接和权限认证就配置完成了。
首先添加 MongoDB 源:
1 |
sudo vi /etc/yum.repos.d/mongodb-org.repo |
修改为如下内容保存:
1 |
[mongodb-org-5.0] |
然后执行 yum 命令安装:
1 |
sudo yum install mongodb-org |
启动 MongoDB 服务:
1 |
sudo systemctl start mongod |
停止和重新加载 MongoDB 服务:
1 |
sudo systemctl stop mongod |
有关远程连接和认证配置可以参考上文,方式是相同的。
更多 Linux 发行版的 MongoDB 安装方式可以参考官方文档:https://docs.mongodb.com/manual/administration/install-on-linux/。
完整安装说明请参考:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/,如下内容仅作参考。
首先确保一些依赖库已经正确安装了,运行如下命令:
1 |
xcode-select --install |
推荐使用 Homebrew 安装,执行 brew 命令即可:
1 |
brew tap mongodb/brew |
然后创建一个新文件夹 /data/db,用于存放 MongoDB 数据。
启动 MongoDB 服务:
1 |
brew services start mongodb-community@5.0 |
这样就启动了 MongoDB 服务。
停止、重启 MongoDB 服务的命令:
1 |
brew services stop 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 是一个轻量级的关系型数据库,以表的形式来存储数据,本节我们来了解下它的安装方式。
对于 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 服务,那么我们就可以使用它来进行数据存储了。
下面仍然分不同平台进行介绍。
直接使用 apt-get 命令即可下载安装:
1 |
sudo apt-get update |
在安装过程中会提示输入用户名密码,输入之后等待片刻即可完成安装。
启动、关闭、重启 MySQL 服务命令:
1 |
sudo service mysql start |
完整的安装说明可以参考:https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7
以 MySQL 5.7 的 Yum 源为例,如果需要更高版本可以另寻,安装命令如下:
1 |
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm |
运行如上命令即可完成安装,初始密码为空。接下来需要启动 MySQL 服务。
启动 MySQL 服务命令:
1 |
sudo systemctl start mysqld |
停止、重启命令:
1 |
sudo systemctl stop mysqld |
以上我们就完成了 Linux 下 MySQL 的安装,安装完成之后可以修改密码,可以执行如下命令:
1 |
mysql -uroot -p |
输入密码后进入 MySQL 命令行模式。
1 |
use mysql; |
命令中 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 的过程结束。
推荐使用 Homebrew 安装,执行 brew 命令即可。
1 |
brew install mysql |
启动、停止、重启 MySQL 服务的命令:
1 |
sudo mysql.server start |
Mac 一般不会作为服务器使用,如果要想取消本地 host 绑定,同样修改 my.cnf 文件,然后重启服务即可。
Appium 是移动端的自动化测试工具,类似于前面所说的 Selenium,利用它我们可以驱动 Android、iOS 等设备完成自动化测试,比如模拟点击、滑动、输入等操作,其官方网站为:http://appium.io/,本节来了解一下 Appium 的安装方式。
首先我们需要安装 Appium,Appium 负责驱动移动端来完成一系列操作,对 iOS 设备来说,它使用苹果的 UIAutomation 来实现驱动,对于 Android 来说,它使用 UiAutomator 和 Selendroid 来实现驱动。
同时 Appium 也相当于一个服务器,我们可以向 Appium 发送一些操作指令,Appium 就会根据不同的指令对移动设备进行驱动,完成不同的动作。
安装 Appium 有两种方式,一种是直接下载安装包 Appium Desktop 来安装,另外一种是通过 Node.js 来安装,下面我们各自介绍一下两种安装方式。
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,具体的安装方式可以参见:http://www.runoob.com/nodejs/nodejs-install-setup.html,安装完成之后就可以使用 npm 命令了。
接下来使用 npm 命令全局安装 Appium 即可,命令如下:
1 |
npm install -g appium |
等待命令执行执行完成即可,这样就成功安装了 Appium。
如果我们要使用 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。
首先需要声明的是,Appium 是一个做自动化测试的工具,用它来测试我们自己开发的 App 是完全没问题的,它携带的是开发者证书(Development Certificate)。但如果我们想拿 iOS 设备来做数据爬取的话又是另外一回事了,一般我们做数据爬取都是使用现有的 APP,在 iOS 上一般都是通过 App Store 下载的,它携带的是分发证书(Distribution Certificate),而携带这种证书的应用都是禁止被测试的,所以只有获取 ipa 安装包再重新签名之后才可以被 Appium 测试,具体的方法不再展开阐述,如感兴趣可以搜索相关资料。
因此在这里推荐直接使用 Android 来进行测试,如果你可以完成上述操作重签名操作,那么可以参考如下内容配置 iOS 开发环境。
Appium 驱动 iOS 设备必须要在 Mac 下进行,Windows 和 Linux 是平台是无法完成的,下面只介绍一下 Mac 平台的相关配置。
Mac 平台需要的配置如下:
配置满足要求之后执行如下命令即可配置开发依赖的一些库和工具:
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 的安装方式。
如果你的系统是 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 安装成功了。
详细的分步骤的安装说明可以参见官方文档: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 |
Unable to find image 'hello-world:latest' locally |
如果出现上文类似提示内容则证明 Docker 可以正常使用了。
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 的安装方式。
最简单的安装方式还是使用 pip,直接执行如下命令即可安装:
1 |
pip3 install mitmproxy |
这是最简单和通用的安装方式,执行完毕之后即可完成 mitmproxy 的安装,另外还安装了 mitmdump、mitmweb 两个组件,如果不想用此种方式安装也可以选择下文列出的专门针对各个平台的安装方式或者 Docker 安装方式。
可以到 https://mitmproxy.org/ 获取安装包,如图所示:

下载之后直接双击安装包即可安装。
注意在 Windows 上不支持 mitmproxy 的控制台接口,但是可以使用 mitmdump 和 mitmweb。
Linux 可以下载编译好的二进制包,此发行包一般是最新版本,它包含了最新版本的 mitmproxy 和内置的 Python3 环境还有最新的 OpenSSL 环境。
如果你的环境里没有 Python3 和 OpenSSL 环境,建议使用此种方式安装,如图所示,下载安装包即可:

下载之后需要解压然后将其配置到环境变量。
1 |
tar -zxvf mitmproxy-*-linux.tar.gz |
这样就可以将三个可执行文件移动到了 /usr/bin 目录,而一般 /usr/bin 目录都已经配置在了环境变量下,所以接下来我们就可以直接调用这三个工具了。
Mac 的安装非常简单,使用 HomeBrew 即可,命令如下:
1 |
brew install mitmproxy |
执行命令后即可完成 mitmproxy 的安装。
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 平台下的证书配置过程。
双击 mitmproxy-ca.p12,就会出现导入证书的引导页,如图所示:

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

不需要设置密码,直接点击下一步即可。
接下来需要选择证书的存储区域,如图所示:

点击第二个选项“将所有证书放入下列存储”,然后点击浏览,再选择证书存储位置为“受信任的根证书颁发机构”,确定,点击下一步。
最后如果有安全警告均点击“是”即可,如图所示:

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

这样就配置完成 Mac 下信任 CA 证书了。
将 mitmproxy-ca-cert.pem 文件发送到 iPhone 上,推荐使用邮件的方式发送,iPhone 上可以直接点击附件并识别安装,如图所示:

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

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

如果你的 iOS 版本是 10.3 以下的话,此处信任 CA 证书的流程就已经完成了。
如果你的 iOS 版本是 10.3 及以上,还需要在设置->通用->关于本机->证书信任设置将证书添加完全信任,如图所示:

在这里将 mitmproxy 的完全信任开关打开即可。
这样 iOS 上配置信任 CA 证书的流程就结束了。
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 就为它做了一层封装,下面我们来看下它的安装方式。
推荐使用 Pip 安装,命令如下:
1 |
pip install python-scrapyd-api |
安装完成之后便可以使用 Python 来获取主机状态了,所以如上的操作便可以用 Python 代码实现:
1 |
from scrapyd_api import ScrapydAPI |
运行结果:
1 |
["myproject", "otherproject"] |
这样我们便可以用 Python 直接来获取各个主机上 Scrapy 任务的运行状态了。
在将 Scrapy 代码部署到远程 Scrapyd 的时候,其第一步就是要将代码打包为 Egg 文件,其次需要将 Egg 文件上传到远程主机,这个过程如果我们用程序来实现是完全可以的,但是我们并不需要做这些工作,因为 Scrapyd-Client 已经为我们实现了这些功能。
下面我们就来来一下 Scrapyd-Client 的安装过程。
推荐使用 pip 安装,命令如下:
1 |
pip3 install scrapyd-client |
安装成功后会有一个可用命令,叫做 scrapyd-deploy,即部署命令。
我们可以输入如下测试命令测试 Scrapyd-Client 是否安装成功:
1 |
scrapyd-deploy -h |
如果出现如图类似输出则证明 Scrapyd-Client 已经成功安装:

Scrapyd 是一个用于部署和运行 Scrapy 项目的工具。有了它,你可以将写好的 Scrapy 项目上传到云主机并通过 API 来控制它的运行。
既然是 Scrapy 项目部署,所以基本上都使用 Linux 主机,所以本节的安装是针对于 Linux 主机的。
推荐使用 pip 安装,命令如下:
1 |
pip3 install scrapyd |
安装完毕之后需要新建一个配置文件 /etc/scrapyd/scrapyd.conf,Scrapyd 在运行的时候会读取此配置文件。
在 Scrapyd 1.2 版本之后不会自动创建该文件,需要我们自行添加。
执行命令新建文件:
1 |
sudo mkdir /etc/scrapyd |
写入如下内容:
1 |
[scrapyd] |
配置文件的内容可以参见官方文档:https://scrapyd.readthedocs.io/en/stable/config.html#example-configuration-file,在这里的配置文件有所修改,其中之一是 max_proc_per_cpu 官方默认为 4,即一台主机每个 CPU 最多运行 4 个 Scrapy Job,在此提高为 10,另外一个是 bind_address,默认为本地 127.0.0.1,在此修改为 0.0.0.0,以使外网可以访问。
由于 Scrapyd 是一个纯 Python 项目,在这里可以直接调用 scrapyd 来运行,为了使程序一直在后台运行,Linux 和 Mac 可以使用如下命令:
1 |
(scrapyd > /dev/null &) |
这样 Scrapyd 就会在后台持续运行了,控制台输出直接忽略,当然如果想记录输出日志可以修改输出目标,如:
1 |
(scrapyd > ~/scrapyd.log &) |
则会输出 Scrapyd 运行输出到 ~/scrapyd.log 文件中。
运行之后便可以在浏览器的 6800 访问 WebUI 了,可以简略看到当前 Scrapyd 的运行 Job、Log 等内容,如图所示:

当然运行 Scrapyd 更佳的方式是使用 Supervisor 守护进程运行,如果感兴趣可以参考:http://supervisord.org/。
限制配置完成之后 Scrapyd 和它的接口都是可以公开访问的,如果要想配置访问认证的话可以借助于 Nginx 做反向代理,在这里需要先安装 Nginx 服务器。
在此以 Ubuntu 为例进行说明,安装命令如下:
1 |
sudo apt-get install nginx |
然后修改 Nginx 的配置文件 nginx.conf,增加如下配置:
1 |
http { |
在这里使用的用户名密码配置放置在 /etc/nginx/conf.d 目录,我们需要使用 htpasswd 命令创建,例如创建一个用户名为 admin 的文件,命令如下:
1 |
htpasswd -c .htpasswd admin |
接下就会提示我们输入密码,输入两次之后,就会生成密码文件,查看一下内容:
1 |
cat .htpasswd |
配置完成之后我们重启一下 Nginx 服务,运行如下命令:
1 |
sudo nginx -s reload |
这样就成功配置了 Scrapyd 的访问认证了。
PySpider 是国人 binux 编写的强大的网络爬虫框架,它带有强大的 WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,同时它支持多种数据库后端、多种消息队列,另外它还支持 JavaScript 渲染页面的爬取,使用起来非常方便,本节介绍一下它的安装过程。
PySpider 是支持 JavaScript 渲染的,而这个过程是依赖于 PhantomJS 的,所以还需要安装 PhantomJS,所以在安装之前请安装好 PhantomJS,参考 https://setup.scrape.center/phantomjs。
推荐使用 pip 安装,命令如下:
1 |
pip3 install pyspider |
命令执行完毕即可完成安装。
Windows 下可能会出现这样的错误提示:Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-vXo1W3/pycurl
这个是 PyCurl 安装错误,一般会出现在 Windows 下,需要安装 PyCurl 库,下载链接为:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl,找到对应 Python 版本然后下载相应的 Wheel 文件。
如 Windows 64 位,Python3.6 则下载 pycurl‑7.43.0‑cp36‑cp36m‑win_amd64.whl,随后用 Pip 安装即可,命令如下:
1 |
pip3 install pycurl‑7.43.0‑cp36‑cp36m‑win_amd64.whl |
Linux 下如果遇到 PyCurl 的错误可以参考本文:https://imlonghao.com/19.html
安装完成之后,可以直接在命令行下启动 PySpider:
1 |
pyspider all |
控制台会有类似如下输出,如图所示:

这时 PySpider 的 Web 服务就会在本地 5000 端口运行,直接在浏览器打开:http://localhost:5000/ 即可进入 PySpider 的 WebUI 管理页面,如图所示:

如果出现类似页面那证明 PySpider 已经安装成功了。
Scrapy 是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖库有 Twisted,lxml,pyOpenSSL。而在不同平台环境又各不相同,所以在安装之前最好确保把一些基本库安装好,尤其是 Windows。本节介绍一下 Scrapy 在不同平台的安装方法。
这种方法是一种比较简单的安装 Scrapy 的方法(尤其是对 Windows 来说),如果你的 Python 是使用 Anaconda 安装的,或者还没有安装 Python 的话,可以使用该方法安装,简单省力,当然如果你的 Python 不是通过 Anaconda 安装的,可以继续查看下文中各平台直接安装方法。
Anaconda 的安装方式可以查看 https://setup.scrape.center/python,在此不再赘述。
如果已经安装好了 Anaconda,那么可以通过 conda 命令安装 Scrapy,安装命令如下:
1 |
conda install Scrapy |
运行之后便可以完成 Scrapy 的安装。
如果你的 Python 不是使用 Anaconda 安装的,可以参考如下方式来一步步完成 Scrapy 的安装。
首先尝试直接使用 pip3 安装,命令如下:
1 |
pip3 install scrapy |
如果安装过程一切顺利,那就可以忽略后续步骤,否则,请参阅后续步骤一点点安装。
lxml 的安装过程请参见 https://setup.scrape.center/lxml,在此不再赘述,此库非常重要,请一定要安装成功。
官方网站下载 Wheel 文件,https://pypi.python.org/pypi/pyOpenSSL#downloads,如当前最新版本名称是 pyOpenSSL-21.0.0-py2.py3-none-any.whl ,直接下载,下载后利用 pip 安装即可:
1 |
pip3 install pyOpenSSL-17.2.0-py2.py3-none-any.whl |
到 http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 下载 Wheel 文件,利用 pip 安装即可。
如 Python 3.6 版本,Windows 64 位系统,当前最新版本为 Twisted‑20.3.0‑cp36‑cp36m‑win_amd64.whl,直接下载即可,如图所示,最新版本以网站为准。

然后 pip 安装即可:
1 |
pip3 install Twisted‑17.5.0‑cp36‑cp36m‑win_amd64.whl |
从官方网站下载对应版本的安装包即可,链接为:https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/,如图所示:

如 Python 3.6 版本可以选择下载 pywin32-221.win-amd64-py3.6.exe,下载完毕之后双击安装即可。
注意这里使用的是 Build 221 版本,随着时间推移,版本肯定会继续更新,最新的版本可以查看:https://sourceforge.net/projects/pywin32/files/pywin32/,查找最新的版本安装即可。
安装好了以上的依赖库,最后安装 Scrapy 就非常简单了,依然使用 pip,命令如下:
1 |
pip3 install scrapy |
等待命令结束没有报错,就证明 Scrapy 已经安装好了。
在 Linux 上的安装方式依然分为两类平台介绍。
首先确保一些依赖库已经安装,运行如下命令:
1 |
sudo yum groupinstall -y development tools |
最后利用 pip 安装 Scrapy 即可,运行如下命令:
1 |
pip3 install Scrapy |
首先确保一些依赖库已经安装,运行如下命令:
1 |
sudo apt-get install build-essential python3-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev |
然后利用 Pip 安装 Scrapy 即可,运行如下命令:
1 |
pip3 install Scrapy |
运行完毕之后即可完成 Scrapy 的安装。
在 Mac 下首先也是进行依赖库的安装。
在 Mac 上构建 Scrapy 的依赖库需要 C 编译器以及开发头文件,它一般由 Xcode 提供,运行如下命令安装即可:
1 |
xcode-select --install |
随后利用 Pip 安装 Scrapy 即可,运行如下命令:
1 |
pip3 install Scrapy |
运行完毕之后即可完成 Scrapy 的安装。
安装之后,在命令行下输入 scrapy,如果出现类似下方的结果,就证明 Scrapy 安装成功,如图所示:

six 包版本过低,six 包是一个提供兼容 Python2 和 Python3 的库,升级 six 包即可:
1 |
sudo pip3 install -U six |
这是在 Linux 下常出现的错误,缺少 Libffi 这个库。什么是 libffi?“FFI” 的全名是 Foreign Function Interface,通常指的是允许以一种语言编写的代码调用另一种语言的代码。而 Libffi 库只提供了最底层的、与架构相关的、完整的”FFI”。
安装相应的库即可。
Ubuntu、Debian:
1 |
sudo apt-get install build-essential libssl-dev libffi-dev python3-dev |
CentOS、RedHat:
1 |
sudo yum install gcc libffi-devel python-devel openssl-devel |
这是缺少加密的相关组件,利用 Pip 安装即可。
1 |
pip3 install cryptography |
缺少 packaging 这个包,它提供了 Python 包的核心功能,利用 Pip 安装即可。
缺少 cffi 包,使用 Pip 安装即可:
1 |
pip3 install cffi |
缺少 pyparsing 包,使用 Pip 安装即可:
1 |
pip3 install pyparsing appdirs |
Scrapy-Redis 是 Scrapy 分布式的扩展模块,有了它我们可以方便地实现 Scrapy 分布式爬虫的搭建,本节来介绍一下 Scrapy-Redis 的安装方式。
推荐使用 pip 安装,命令如下:
1 |
pip3 install scrapy-redis |
也可以到 PyPi 下载 Wheel 文件安装:https://pypi.org/project/scrapy-redis/#downloads,如当前最新版本为 0.7.1,则可以下载 scrapy_redis-0.7.1-py2.py3-none-any.whl ,然后 pip 安装即可。
1 |
pip3 install scrapy_redis-0.7.1-py2.py3-none-any.whl |
安装完成之后,可以在 Python 命令行下测试。
1 |
$ python3 |
如果没有错误报出,则证明库已经安装好了。
对于 Redis 来说,我们要使用 redis-py 库来与其交互,本节我们来介绍一下 redis-py 的安装方法。
推荐使用 pip3 安装,命令如下:
1 |
pip3 install redis |
运行完毕之后即可完成 redis-py 的安装。
为了验证库是否已经安装成功,可以在命令行下测试一下:
1 |
$ python3 |
在命令行首先输入 python3,进入命令行模式,输入如上内容,如果成功输出了其版本内容,那么证明 redis-py 成功安装。
Scrapy-Splash 是一个 Scrapy 中支持 JavaScript 渲染的工具,本节来介绍一下它的安装方式。
Scrapy-Splash 的安装分为两部分,一个是是 Splash 服务的安装,安装方式是通过 Docker,安装之后会启动一个 Splash 服务,我们可以通过它的接口来实现 JavaScript 页面的加载。另外一个是 ScrapySplash 的 Python 库的安装,安装之后即可在 Scrapy 中使用 Splash 服务。
Scrapy-Splash 会使用 Splash 的 HTTP API 进行页面渲染,所以我们需要安装 Splash 来提供渲染服务,安装教程参考:https://setup.scrape.center/splash。
成功安装了 Splash 之后,我们接下来再来安装一下其 Python 库,安装命令如下:
1 |
pip3 install scrapy-splash |
命令运行完毕后就会成功安装好此库。
完毕!
成功安装好了 Selenium 库,但是它是一个自动化测试工具,需要浏览器来配合它使用,那么本节我们就介绍一下 Chrome 浏览器及 ChromeDriver 驱动的配置。
首先需要下载一个 Chrome 浏览器,方法多样,在此不再赘述。
随后我们需要安装一个 ChromeDriver 才能驱动 Chrome 浏览器完成相应的操作,下面我们来介绍下怎样安装 ChromeDriver。
在这之前请确保已经正确安装好了 Chrome 浏览器并可以正常运行,安装过程不再赘述。
点击 Chrome 的菜单,帮助->关于 Chrome,即可查看 Chrome 的版本号,在这里我的版本是 94.0.4606,如图所示:

请记住 Chrome 版本号,在后面选择 ChromeDriver 版本时需要用到。
打开 ChromeDriver 的官方网站,链接为:https://sites.google.com/chromium.org/driver/downloads。可以看到到目前为止最新支持的 Chrome 浏览器版本为 95,最新版本以官网为准,如图所示:

每个版本都有相应的支持 Chrome 版本介绍,请找好自己的 Chrome 浏览器版本对应的 ChromeDriver 版本再下载,否则可能导致无法正常工作。
由于我这边的 ChromeDriver 版本是 94.0.4606,找到对应的下载列表,如图所示:

Windows 系统就下载 win32.zip,Mac 系统 Intel 芯片下载 mac64.zip,Mac 系统 M1 芯片下载 mac64_m1.zip,Linux 系统下载 linux64.zip,下载解压之后会得到一个 ChromeDriver 的可执行文件。
另外如果上面的链接打不开的话,也可以从对应的 ChromeDriver 镜像网站下载:https://chromedriver.storage.googleapis.com/index.html,同样地,版本对应好即可。
下载完成后将 ChromeDriver 的可执行文件配置到环境变量下。
在 Windows 下,建议直接将 chromedriver.exe 文件拖到 Python 的 Scripts 目录下,如图所示:

也可以单独将其所在路径配置到环境变量,环境变量的配置方法请参见 Python3 的安装一节。
在 Linux、Mac 下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里。
例如移动文件到 /usr/bin 目录,首先命令行进入其所在路径,然后将其移动到 /usr/bin:
1 |
sudo mv chromedriver /usr/bin |
当然也可以将 ChromeDriver 配置到 $PATH,首先可以将可执行文件放到某一目录,目录可以任意选择,例如将当前可执行文件放在 /usr/local/chromedriver 目录下,接下来可以修改 ~/.profile 文件,命令如下:
1 |
export PATH="$PATH:/usr/local/chromedriver" |
保存然后执行:
1 |
source ~/.profile |
即可完成环境变量的添加。
配置完成之后,就可以在命令行下直接执行 chromedriver 命令了。
命令行下输入:
1 |
chromedriver |
输入控制台有类似输出,如图所示:

如果有类似输出则证明 ChromeDriver 的环境变量配置好了。
另外如果要配合代码进行测试的话,可以安装 Selenium,安装方式参考:https://setup.scrape.center/selenium,安装好了之后,随后再在程序中测试,执行如下 Python 代码:
1 |
from selenium import webdriver |
运行之后会弹出一个空白的 Chrome 浏览器,证明所有的配置都没有问题,如果没有弹出,请检查之前的每一步的配置。
如果弹出之后闪退,则可能是 ChromeDriver 版本和 Chrome 版本不简容,请更换 ChromeDriver 版本。
如果没有问题,接下来我们就可以利用 Chrome 来做网页抓取了。
pyquery 是一个强大的网页解析工具,它提供了和 jQuery 类似的语法来解析 HTML 文档,支持 CSS 选择器,使用非常方便,本节我们了解下它的安装方式。
推荐使用 pip3 安装,命令如下:
1 |
pip3 install pyquery |
命令执行完毕之后即可完成安装。
当然也可以到 PyPi 下载对应的 wheel 文件安装,https://pypi.python.org/pypi/pyquery/#downloads,如当前最新版本为 1.2.17,则下载的文件名称为 pyquery-1.2.17-py2.py3-none-any.whl,下载到本地再 pip3 安装即可,命令如下:
1 |
pip3 install pyquery-1.2.17-py2.py3-none-any.whl |
安装完成之后,可以在 Python 命令行下测试。
1 |
$ python3 |
如果没有错误报出,则证明库已经安装好了。
在 Python3 中如果想要将数据存储到 MySQL 中就需要借助于 PyMySQL 来操作,本节我们介绍一下 PyMySQL 的安装方式。
推荐使用 pip3 安装,命令如下:
1 |
pip3 install pymysql |
执行完命令即可完成安装。
为了验证库是否已经安装成功,可以在命令行下测试一下:
1 |
$ python3 |
在命令行首先输入 python3,进入命令行模式,输入如上内容,如果成功输出了其版本内容,那么证明 PyMySQL 成功安装。
在 Python 中如果想要和 MongoDB 进行交互就需要借助于 PyMongo 库,本节我们来了解一下 PyMongo 的安装方法。
推荐使用 pip3 安装,命令如下:
1 |
pip3 install "pymongo<4.0" |
注意:因为 PyMongo 在 4.0 版本移除了 insert, update, remove 等方法,所以如果安装 4.0 及以上版本,《Python3网络爬虫开发实战(第二版)》书中部分代码会报错,3.x 就不会有问题。详情请见官方说明:https://pymongo.readthedocs.io/en/stable/migrate-to-pymongo4.html#collection-insert-is-removed。
当然,如果安装 4.0 及以上版本的话也可以,需要手动把 insert 方法改成 insert_one 或 insert_many 方法即可。
运行完毕之后即可完成 PyMongo 的安装。
为了验证库是否已经安装成功,可以在命令行下测试一下:
1 |
$ python3 |
在命令行首先输入 python3,进入命令行模式,输入如上内容,如果成功输出了其版本内容,那么证明 PyMongo 成功安装。
lxml 是 Python 的一个解析库,支持 HTML 和 XML 的解析,支持 XPath 解析方式,而且解析效率非常高,本节我们了解下它的安装方式,分为 Windows、Linux、Mac 三大平台来介绍。
Windows 下可以先尝试利用 pip3 安装,直接执行如下命令即可:
1 |
pip3 install lxml |
如果没有任何报错则证明安装成功。
如果出现报错,比如提示缺少 libxml2 库等信息,可以采用 wheel 方式安装。
推荐直接到这里下载对应的 wheel 文件,链接为:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml,找到本地安装 Python 版本和系统对应的 lxml 版本,例如 Windows 64 位 Python3.6 就选择 lxml‑3.8.0‑cp36‑cp36m‑win_amd64.whl,以此类推,将其下载到本地。
然后利用 pip3 安装即可,命令如下:
1 |
pip3 install lxml‑3.8.0‑cp36‑cp36m‑win_amd64.whl |
这样我们就可以成功安装好 lxml 了。
在 Linux 平台下安装问题不大,同样可以先尝试 pip3 安装,命令如下:
1 |
pip3 install lxml |
如果报错,可以尝试下方的解决方案。
对于此类系统,报错主要是因为缺少必要的库。
执行如下命令安装所需的库即可:
1 |
sudo yum groupinstall -y development tools |
主要是 libxslt-devel libxml2-devel 这两个库,lxml 依赖于它们。安装好了之后重新尝试 Pip 安装即可。
报错的原因同样可能是缺少了必要的类库,执行如下命令安装:
1 |
sudo apt-get install -y python3-dev build-essential libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev |
安装好了之后重新尝试 pip 安装即可。
在 Mac 平台下,仍然可以首先尝试 pip3 安装,命令如下:
1 |
pip3 install lxml |
如果产生错误,可以执行如下命令将必要的类库安装:
1 |
xcode-select --install |
之后再重新运行 pip3 安装就没有问题了。
lxml 是一个非常重要的库,比如 BeautifulSoup、Scrapy 框架都需要用到此库,所以请一定安装成功。
安装完成之后,可以在 Python 命令行下测试。
1 |
$ python3 |
如果没有错误报出,则证明库已经安装好了。
Flask 是一个轻量级的 Web 服务程序,简单、易用、灵活,在本书中我们主要用它来做一些 API 服务,本节我们来了解下它的安装方式。
推荐使用 pip 安装,命令如下:
1 |
pip3 install flask |
运行完毕之后就可以完成安装。
安装成功之后可以运行如下实例代码测试一下:
1 |
from flask import Flask |
直接运行代码,可以发现系统会在 5000 端口开启 Web 服务,控制台输出如下:
1 |
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) |
直接访问:http://127.0.0.1:5000/,可以观察到网页中呈现了 Hello World!,如图所示:

这样一个最简单的 Flask 程序就运行成功了。
本节介绍下 Python 常用爬虫库 requests 的安装方式。
无论是 Windows、Linux 还是 Mac,都可以通过 pip 这个包管理工具来安装。
在命令行下运行如下命令即可完成 requests 库的安装:
1 |
pip3 install requests |
这是最简单的安装方式,推荐此种方法安装。
wheel 是 Python 的一种安装包,其后缀为 whl,在网速较差的情况下可以选择下载下 wheel 文件再安装,直接用 pip3 命令加文件名安装即可。
不过在这之前需要先安装 wheel 库,安装命令如下:
1 |
pip3 install wheel |
然后到 PyPi 上下载对应的 wheel 文件,如当前最新版本为 2.17.3,则打开:https://pypi.python.org/pypi/requests/2.17.3#downloads,下载 requests-2.17.3-py2.py3-none-any.whl 到本地。
随后命令行进入 Wheel 文件目录,利用 pip 安装即可。
1 |
pip3 install requests-2.17.3-py2.py3-none-any.whl |
这样我们同样可以完成 requests 的安装。
那么如果你不想用 pip 来安装,或者想获取某一特定版本,可以选择下载源码安装。
此种方式需要先找到此库的源码地址,然后下载下来再用命令安装。
requests 项目的地址是:https://github.com/kennethreitz/requests。
可以通过 Git 来下载源代码:
1 |
git clone git://github.com/kennethreitz/requests.git |
或通过 curl 下载:
1 |
curl -OL https://github.com/kennethreitz/requests/tarball/master |
下载下来之后,进入目录,执行如下命令安装即可:
1 |
cd requests |
命令执行结束后即可完成 requests 的安装,由于此种安装方式比较繁琐,后文此种安装方式不再赘述。
为了验证库是否已经安装成功,可以在命令行下测试一下:
1 |
$ python3 |
在命令行首先输入 python3,进入命令行模式,然后输入如上内容,如果什么错误提示也没有,那么就证明我们已经成功安装了 requests。
BeautifulSoup 是 Python 的一个 HTML 或 XML 的解析库,我们可以用它来方便地从网页中提取数据,它拥有强大的 API 和多样的解析方式,本节我们了解下它的安装方式。
BeautifulSoup 的 HTML 和 XML 解析器是依赖于 lxml 库的,所以在此之前请确保已经成功安装好了 lxml 库,具体的安装方式参见 lxml 的安装:https://setup.scrape.center/lxml。
目前 BeautifulSoup 的最新版本是 4.x 版本,之前的版本已经停止开发了,推荐使用 pip3 来安装,安装命令如下:
1 |
pip3 install beautifulsoup4 |
命令执行完毕之后即可完成安装。
当然也可以从 PyPi 下载 wheel 文件安装,链接如下:
https://pypi.python.org/pypi/beautifulsoup4
然后 pip3 安装 Wheel 文件即可。
安装完成之后可以运行下方的代码验证一下。
1 |
from bs4 import BeautifulSoup |
运行结果:
1 |
Hello |
如果运行结果一致则证明安装成功。
注意在这里我们虽然安装的是 beautifulsoup4 这个包,但是在引入的时候是引入的 bs4,这是因为这个包源代码本身的库文件夹名称就是 bs4,所以安装完成之后,这个库文件夹就被移入到我们本机 Python3 的 lib 库里,所以识别到的库文件名称就叫做 bs4,所以我们引入的时候就引入 bs4 这个包。
因此,包本身的名称和我们使用时导入的包的名称并不一定是一致的。
之前我们介绍的 requests 库是一个阻塞式 HTTP 请求库,当我们发出一个请求后,程序会一直等待服务器的响应,直到得到响应后程序才会进行下一步的处理,其实这个过程是比较耗费资源的。如果程序可以在这个等待过程中做一些其他的事情,如进行请求的调度、响应的处理等等,那么爬取效率一定会大大提高。
Aiohttp 就是这样一个提供异步 Web 服务的库,从 Python3.5 版本开始,Python 中加入了 async/await 关键字,使得回调的写法更加直观和人性化,Aiohttp 的异步操作借助于 async/await 关键字写法变得更加简洁,架构更加清晰。使用异步请求库来进行数据抓取会大大提高效率,下面我们来看一下这个库的安装方法。
推荐使用 pip 安装,命令如下:
1 |
pip3 install aiohttp |
另外官方还推荐安装如下两个库,一个是字符编码检测库 cchardet,另一个是加速 DNS 解析库 aiodns,安装命令如下:
1 |
pip3 install cchardet aiodns |
安装完成之后,可以在 Python 命令行下测试。
1 |
$ python3 |
如果没有错误报出,则证明库已经安装好了。
大家好,我是崔庆才,由于爬虫技术不断迭代升级,一些旧的教程已经过时、案例已经过期,最前沿的爬虫技术比如异步、JavaScript 逆向、安卓逆向、智能解析、WebAssembly、大规模分布式、Kubernetes 等技术层出不穷,我最近新出了一套最新最全面的 Python3 网络爬虫系列教程。
博主自荐:截止 2022 年,可以将最前沿最全面的爬虫技术都涵盖的教程,如异步、JavaScript 逆向、安卓逆向、智能解析、WebAssembly、大规模分布式、Kubernetes 等,市面上目前就这一套了。
最新教程对旧的爬虫技术内容进行了全面更新,搭建了全新的案例平台进行全面讲解,保证案例稳定有效不过期。
教程请移步:
本节会介绍 Windows、Linux、Mac 三大平台下安装 Python3 的过程。
Windows 下安装 Python3 的方式有两种,一种是通过 Anaconda 安装,Anaconda 提供了 Python 的科学计算环境,里面自带了 Python 以及常用的库,如果选用了此种方式后面的环境配置方式会更加简便,另一种是直接下载安装包安装,即标准的安装方式。下面会依次介绍这两种安装方式,任选其一即可。
Anaconda 的 官方下载链接为:https://www.anaconda.com/products/individual,选择 Windows 版本的安装包下载即可,如图所示:

如果下载速度过慢可以选择使用清华大学镜像,下载列表链接为:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/,使用说明链接为:https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/,可以选择需要的版本进行下载,速度相比官网会快很多。
下载完成之后直接双击运行安装包安装即可,安装完成之后 Python3 的环境就配置好了。
推荐直接下载可执行文件安装包安装,到官方网站下载 Python3 安装包。
https://www.python.org/downloads/
到目前为止,Python 的最新版本是 3.9.7,如果想安装特定的 Python 版本,可以查看网页下方的内容,看到各个 Python 安装包的发布历史,如图所示:

由于一些库的兼容性问题,个人比较推荐安装 Python 3.6 或 3.7 版本,而非 3.8、3.9 版本。
Python 3.6 版本安装包的下载链接为:https://www.python.org/downloads/release/python-368/,Python 3.7 版本安装包的下载链接为:https://www.python.org/downloads/release/python-379/,打开之后可以看到如下下载列表:

64 位系统可以下载 Windows x86-64 executable installer,32 位系统可以下载 Windows x86 executable installer。
下载完成之后,直接双击运行 Python 安装包,使用图形界面安装,设置好 Python 的安装路径,完成后将 Python3 和 Python3 的 Scripts 目录配置到环境变量即可。
环境变量的配置,此处以 Win10 系统为例进行演示。
假如我安装后的 Python3 路径为 C:\Python36,从资源管理器中打开该路径,如图所示:

将该路径复制下来。
随后打开电脑-属性,如图所示:

点击左侧的高级系统设置,即可看到在弹出的窗口中下方有环境变量按钮,如图所示:

点击环境变量,找到系统变量下的 Path 变量,随后点击编辑按钮,如图所示:

随后点击新建,新建一个条目,将刚才拷贝的 C:\Python36 复制进去,当然此处的路径就是你的 Python3 安装目录,请自行替换,然后再把 C:\Python36\Scripts 路径复制进去,如图所示:

最后点击确定即可完成环境变量的配置。
配置好环境变量之后,我们就可以直接在命令行直接执行环境变量路径下的可执行文件了,如 python、pip 等命令。
以上两种安装方式任选其一即可完成安装,但如果我们之前安装过 Python2 的话,可能会导致版本冲突问题,比如在命令行下输入 python 就不知道是调用的 Python2 还是 Python3 了,为了解决这个问题,建议将安装目录中的 python.exe 复制一份,命名为 python3.exe,这样便可以调用 python3 命令了,实际上和 python 命令是完全一致的,这样可以更好地区分 Python 版本,当然如果没有安装过 Python2 的话也建议添加此别名,添加完毕之后如图所示:

对于 pip 来说,安装包中自带了 pip3.exe 可执行文件,我们也可以直接使用 pip3 命令,无需额外配置。
安装完成之后我们可以通过命令行测试一下安装是否成功,在开始菜单搜索 cmd,找到命令提示符,就进入了命令行模式,输入 python 测试一下能否成功调用 python,如果添加了别名的话可以输入 python3 测试,在这里输入的是 python3,如图所示:

类似输出结果如下:
1 |
$ python3 |
如果出现类似上面的提示,则证明 Python3 和 pip3 均安装成功,如果提示命令不存在,那么请检查下环境变量的配置情况。
Linux 下安装方式有多种,命令安装、源码安装、Anaconda 安装。
使用源码安装需要自行编译,时间较长。推荐使用系统自带命令或 Anaconda 安装,简单高效。在这里对各种安装方式分别予以讲解。
不同的 Linux 发行版本安装方式又有不同,在此分别予以介绍。
如果是 CentOS 或 RedHat 版本,使用 yum 命令安装即可。
1 |
sudo yum update -y |
首先安装 Python3,使用 apt-get 安装即可,在安装前还需安装一些基础库,命令如下:
1 |
sudo apt-get install -y python3-dev build-essential libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev libcurl4-openssl-dev |
执行完如上命令之后就可以成功安装好 Python3 了。
然后还需要安装 pip3,仍然使用 apt-get 安装即可,命令如下:
1 |
sudo apt-get install -y python3-pip |
执行完毕之后便可以成功安装 Python3 及 pip3。
如果命令行安装方式有问题,还可以下载 Python3 源码进行安装。
源码下载地址为:https://www.python.org/ftp/python/,可以自行选用想要的版本进行安装,在此以 Python3.6.2 为例进行说明,安装路径设置为 /usr/local/python3。
首先创建安装目录,命令如下:
1 |
sudo mkdir /usr/local/python3 |
随后下载安装包并解压进入,命令如下:
1 |
wget --no-check-certificate https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz |
接下来编译安装,所需时间可能较长,请耐心等待,命令如下:
1 |
sudo ./configure --prefix=/usr/local/python3 |
安装完成之后创建 Python3 链接,命令如下:
1 |
sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3 |
随后下载 Pip 安装包并安装,命令如下:
1 |
wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz |
安装完成后再创建 Pip3 链接,命令如下:
1 |
sudo ln -s /usr/local/python3/bin/pip /usr/bin/pip3 |
这样就成功安装好了 Python3 及 pip3。
Anaconda 同样支持 Linux,Anaconda 的官方下载链接为:https://www.anaconda.com/products/individual,选择对应版本的安装包下载即可。如果下载速度过慢同样可以使用清华镜像,参考 Windows 部分的介绍,在此不再赘述。
命令行测试 Python3 和 pip3 是否安装成功。
1 |
$ python3 |
如出现类似上面的提示,则证明 Python3 和 pip3 安装成功。
在 Mac 下同样有多种安装方式,如 Homebrew、安装包安装、Anaconda 安装等,推荐使用 Homebrew 安装。
Homebrew 是 Mac 平台下强大的包管理工具,首先安装 Homebrew,官方网站是:https://brew.sh/。
执行如下命令即可安装 Homebrew:
1 |
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
安装完成后便可以使用 brew 命令安装 Python3 和 pip3 了。
如果要安装 Python3 的最新版本,可以直接运行如下命令:
1 |
brew install python3 |
由于一些库的兼容性问题,个人比较推荐安装 Python 3.6 或 3.7 版本,而非 3.8、3.9 版本。
所以这里如果要安装 Python3.7 版本,可以运行如下命令:
1 |
brew install python@3.7 |
命令执行完成之后发现 Python3 和 pip3 均已经安装成功。
由于一些库的兼容性问题,个人比较推荐安装 Python 3.6 或 3.7 版本,而非 3.8、3.9 版本。
Python 3.6 版本安装包的下载链接为:https://www.python.org/downloads/release/python-368/,Python 3.7 版本安装包的下载链接为:https://www.python.org/downloads/release/python-379/,打开之后可以看到如下下载列表:

可以选择下载 Mac OS X 64-bit installer,下载完成之后打开安装包按照提示安装即可,安装完毕之后 Python 相关的环境变量就配置好了。
Anaconda 同样支持 Mac,Anaconda 的官方下载链接为:https://www.anaconda.com/products/individual,选择 Python3 版本的安装包下载即可,如图所示:

如果下载速度过慢同样可以使用清华镜像,参考 Windows 部分的介绍,在此不再赘述。
命令行测试 Python3 和 pip3 是否安装成功。
1 |
$ python3 |
如出现类似上面的提示,则证明 Python3 和 pip3 安装成功。
本节介绍了三大平台 Windows、Linux、Mac 下 Python3 的安装方式,如有疑问欢迎留言。
今天搜歌的时候,发现因为版权问题,网易云和 QQ 音乐都搜不到,说酷狗上能搜到,于是我就把之前好久不用的酷狗音乐下载回来了。
不太记得从什么时候开始用网易云音乐听歌的了,好像是从大学的时候,自从用了网易云之后,酷狗就被我渐渐抛弃了。因为好久不用了,我都不太记得我的账号密码是什么了。
但抱着试一试的心态,我尝试登录了一下。
结果居然登录成功了!
然后我就发现了我好久之前收藏过的一些歌,这里截个图啦:

图里面的这个歌单是 14 年创建的,当时我还记得当时听酷狗音乐的时候,我喜欢玩 QQ 飞车这个游戏,喜欢边听歌边开赛车,为了速度与激情,当时我还专门搜集了好多比较动感的音乐,具体名字其实我也不关心,其实到现在我也分不清哪首歌究竟是谁唱的或者或歌名叫什么。但当时觉得就是好听,一气搜集了好多。
那个时候,我还很喜欢听河图、许嵩、汪苏泷、徐良等人的歌,暴露了哈哈哈,当时我还专门为他们创建了歌单。另外当时还有一些网络情歌、dj 土嗨歌也感觉不错,所以当时就加入到我的收藏里面了。
于是今天我就在挨个听我之前收藏的音乐,感觉每一首歌都是那么亲切!而且个个都是我喜欢的(毕竟是之前收藏过的)!有的歌,听的时候都勾起了我当时玩飞车驰骋赛场时候的画面,那种感觉,真的好亲切而又舒服。
不知道这个怎么解释,这种感觉,就像出门在外好久之后回到家的感觉,许久未见的老友见面的感觉,这些歌里面承载着满满的青春和回忆。
我不知道大家有没有之前也用过其他的一些音乐软件,比如说你也可能前几年用过酷狗、酷我、QQ 音乐、网易云,但是现在已经换了其他的音乐软件了。
如果是这样的话,我推荐大家尝试着找一找之前自己用过的音乐软件的账号,把它下载回来,听听自己之前收藏过的歌单,每个人都有每个人的青春和故事,听着自己喜欢过的老歌,一定是一番别样的感觉。
更多精彩内容,请关注我的公众号「进击的 Coder」和「崔庆才丨静觅」。
我对设计美学有一定执念,所以我在编写一些 UI 的时候会比较注重它的一些美观度、舒适度。
随着现在前端的发展,一些成套的组件库也是层出不穷了,比如基于 Vue 的 Element UI、iView,基于 React 的 Ant Design、Fluent UI 等等,它们设计其实挺好的,但有一些色彩搭配和风格还没有达到我理想中的样子。
我其实比较欣赏苹果的那种半透明设计风,比如这样的:

大家感兴趣可以看苹果的设计手册:https://developer.apple.com/design/human-interface-guidelines/
同时我也对 Material Design 中的一些光影理念比较推崇,但并不太喜欢原生的 Material Design,比如这样的:

我个人觉得这种原生的 Material Design 有点用力过猛,显得有些沉重。
相比之下,目前的一些 Element UI、Ant Design 则算是吸收了二者的一些优点,提供了一些 UI 组件,比如这样的:

这种设计风格显得没有 Material Design 那样厚重,也吸取了一些 Apple Design 的风格,另外一些光影效果拿捏也挺不错的。
然而,这些设计还是没有达到我理想中的样子。
比如说,卡片的一些设计、边缘轮廓的一些设计,总让我感觉没有那么清爽。
后来,直到我用了一款梯 🪜 子软件,它是基于一个叫做 STISLA 的 UI 框架设计的,整体风格是这样的:


一眼看过去,爱了爱了,看起来,它借鉴了 Material Design 的一些光影设计理念,同时又不显得那么厚重,一些布局、卡片和文本框的轮廓也显得很明晰,另外一些配色、图标的样式整体也给人一种清爽的感觉,总之我个人非常喜欢。
这个 UI 框架的名字叫做 STISLA,其官网是: https://getstisla.com/,它是基于 BootStrap4 编写的,很可惜的是,它现在没有提供 Vue、React 的支持,所以使用起来暂时还不能完全组件化,不过里面的一些 class 可以直接拿来用,就像使用 tailwind 一样。
STISLA 现在是完全开源的,其 GitHub 仓库是:https://github.com/stisla/stisla,使用的话直接引用其中的 CSS 即可,这里就不再赘述了。
另外关于更多的组件,大家可以到官方 Demo 示例页面来体验,链接是:https://demo.getstisla.com/index.html,这里简单列举几个组件。
头像:

文章列表:

统计图表:

用户信息:

表单:

表格:

不得不说,每个版面我都觉得非常赏心悦目!感兴趣的就去官网看看吧。
好啦,以上就介绍这么多啦,大家感兴趣的话就快快用起来吧~
更多精彩内容,请关注我的公众号「进击的 Coder」和「崔庆才丨静觅」。
最近看了一些书,学到了一些知识和方法论,比如说看刘未鹏的《暗时间》,就学到了很多知识。
读完之后,收获非常大,于是我决定把其中的一些感想写出来。
首先自然而然的就是有关暗时间的解释了,比如什么是暗时间,怎么来利用暗时间,就是我前面发的那篇文章。
虽然整体上看起来这篇文章的中心思想非常简单,我当时看书的时候也体会到了其中的一些中心思想,但等我真的要把这个写成一篇文章或者感想的时候,我却发现我却想不出一个好的定义,好的引入的例子,我原本以为我能非常流畅地把这篇文章写下来的,但真的到写的时候才发现我并没有做好准备,又去翻看了一下原书才写出来。
通过这件事,我就反思到了两件事:
我需要利用好自己的暗时间来思考。
读一本书,不去复盘和思考,收效甚微。
对于第一点。比如我在写文章之前,我应该先构思好我这篇文章的整体脉络,比如怎么引入、怎么说明、怎么结尾等等,这些思考其实平常就可以做的,比如我在下班路上、我在洗漱的时候、我在吃饭的时候,就完全可以拿这个时间来思考,思考不出来的,记下来再去翻看下,看看人家作者是怎么把这个观点表达出来的,作者的思路是怎样的。只有思考过了,脑中有大致的脉络,到时候真的写的时候就变得非常流畅了。而如果平时不加思考,只有写作的时候才去思考,有时候写作效率就会比较低。虽然写作也能帮助很好地思考,真的写不出来的时候再去构思和翻看未尝不可,但总体来说,这样不会比平时也思考的结果来的更好。
对于第二点。有时候我看完一本书,不去复盘和思考,只是泛泛地看完,看完就丢在一边再也不打开,其实收效是非常小的。一本书,往往是一个人几年甚至几十年的精华总结,组织很调理而且完整。相比网上一些碎片化的文章、博客、问答,一本书的价值简直大太多了。读书,自然就要理会到其中作者为我们传达的知识、思想,我们不是为了读书而读书,读书是和作者在心灵层次上的交流,要真的理会到作者的传达的意思,我们往往是需要多去思考、多去复盘、多去实践的。因为,这些知识的形成,也都是作者历经了很多实践和思考换来的,如果我们只是浮光掠影地过一遍,不多去思考和复盘,收效往往并不大。
所以说,这件事让我体会到了这两点。不管是做什么吧,多去思考、复盘,同时要利用好自己的暗时间,结果往往总会是不错的。
共勉。
更多精彩内容,请关注我的公众号「进击的 Coder」和「崔庆才丨静觅」。
最近看了一本书叫《暗时间》。一开始我不知道这本书为什么叫这个名字,什么是暗时间啊?
翻开这本书才知道,这本书算是作者刘未鹏的个人方法论总结,其中有一个就叫做暗时间,这也是相当重要的一个部分,读完这部分之后我来写写自己的一些感想。
首先就说说暗时间吧,暗时间什么意思呢?我们先举几个例子来体会下。
比如说一个人,学习看起来非常刻苦,早上不到七点就去自习室了,然后直到晚上熄灯才回来。可是你会发现他考试成绩还是很差。这除了一些智力影响,还有一个重要的影响就是对时间和效率的把控。虽然有的人看起来非常刻苦,但有时候你会发现,他可能人坐在那里,但思绪却已经飞到了九霄云外。有些人学习但时候把一些定义、方法读了又读,但并没有真正地去思考和理解,其实最后还是没有把一件知识想透彻想明白。总的来说,这些有效的时间都没有用来真正去做有效率的事情。
比如说一台服务器,配置相当牛逼,不管是内存、CPU、GPU 都是顶配中的顶配,但是却被放在那闲置不用,一点功能也没有发挥出来,这资源就白白浪费掉了。但如果我们把它每天进行一些数据处理、计算,发挥出它的最大价值,这才是这正利用好了这些时间和资源。所以,这台服务器闲置是一天,满载运行计算也是一天,这两种情况,对服务器来说,产生的价值是完全不一样的。
每个人每天都有 24 小时,但不同的人,利用这 24 小时的方式不同,那产生的效果也就是不同的。人的一天中,有睡眠时间、通勤时间、工作时间、娱乐时间还有很多碎片时间,在这些时间里面,其实有很多时间是暗时间,有的人利用了这些时间进行了思考和学习,而有的人却在这个时间无所事事。
书中特别强调了思考的重要性,一个人在想什么,我们其实是看不出来的,但同时思考又是非常重要的。善于利用暗时间进行思考的人,可以无形中比别人多出好多的时间,从而实际意义上会比别人或好多年。
书中有一个比喻我特别喜欢:
我们每一个人的生命都像一个沙漏,里面装的沙子都差不多(因为大家的寿命都差不多),但不同的是,有些人的沙漏颈部较细,有些人的沙漏颈部较粗。颈部较细的沙漏可以抓住每一粒时间只沙,虽然沙子总量是一样的,但却会拥有更长的生命。
我觉得这个写的是太好了。
我们做一件事情,不能单纯地以投入的时间作为评判标准,时间和效率的乘积才是真正有意义的衡量标准。比如说背个英语单词吧,虽然我们一直在朗读,但发现记忆效果就是差,这是因为很多时间我们并没有去投入身心去记忆和思考,去思考这个单词更深层次的用法,和其他单词、场景的联系等等。同样学习一些新的知识,如果我们不去深入思考,也只能浅尝辄止。
学习就像电脑的 CPU 处理程序一样,如果我们始终给一个任务分配高的优先级,分配更多的时间到上面,那效果自然就是更好一些。学习知识也是一样,如果我们能够始终多去思考,去思考知识底层更深层的原理和关联,那效果也会更好。
但,人的时间总是有限的,比如工作的时间是有限的,学习的时间也是有限的,也有一些时间必须要用来做固定的事情,比如通勤、吃饭等等。但有时候我们就发现,有些人似乎看的东西不我们你多,玩的也不比我们少,但不知道为什么别人就是比我们走的更远。有一个诀窍就是利用了一些暗时间,这部分暗时间完全可以用来思考。
比如说走路、买菜、洗漱、通勤、出游、吃饭等等,这些时间都可以看作是暗时间,我们可以充分利用这些时间进行思考,梳理和精细化之前看的和读的东西。慢慢地,时间长了,就会产生巨大的影响。
平时生活中,我们可以在大脑中时刻留着几个问题,比如工作上的、生活上的、学习上的都可以,如果记不住的话,那就可以把一些可以利用空闲时间思考的问题记录到一个备忘录里面,有事没事的时候翻出来就思考一下。比如说坐车的时候,我们可以去思考今天遇到的一个算法或设计上的问题。比如说洗漱的时候,我们可以构思一篇文章或者文档的内容和设计。有时候可能洗漱的时候,灵感突然来了,一个问题就马上被想通了。这就是充分利用了暗时间的效果。
能把握住暗时间的人,其实就相当于无形中拥有了更多的时间,这些时间被用在了思考之上,也就可以走的更远。
好嘞,就先写到这里,大家也可以试试看,让我们把握住自己的时间沙漏,利用好我们的暗时间,相信它会迸发出意想不到的威力的。
更多精彩内容,请关注我的公众号「进击的 Coder」和「崔庆才丨静觅」。
有时候我们在逛博客、技术帖子的时候会发现有人是这么分享代码的?

这其实是一张图片,虽然说里面的内容不能复制,但是这张图片整体看看起来就很精致有没有?左上角的三个红黄绿的按钮,就是 Mac 中的窗口操作按钮,然后代码的高亮配色都和我们 IDE 中的配色是完全一致的,整体就是一个 Mac 的风格。
最近群里也有小伙伴在问这个是怎么做的,这里就来给大家介绍一下。
这个工具叫做 carbon,它有自己的网站、代码仓库,另外还有一个类似的 VS Code 插件,这里统一给大家介绍下。
carbon 自己维护了一个网站:https://carbon.now.sh/,我们可以打开它来看看:

可以看到 carbon 提供了多种选项,比如主题选择、编程语言、还有一些底色、间距的配置,下方就是代码的预览效果,同时我们还可以在这里编辑代码。
我们可以在下方任意贴上我们想要贴的代码,比如这里有一段 Python 代码:
1 |
def get_vowels(string): |
我们可以直接贴进去,然后我们可以选择喜欢的主题配色,语言,同时可以选择背景颜色,还可以点击 setting 的按钮配置更详细的内容:

这里的 Window controls 可以控制左上角的现实效果,比如是否带有圆角效果、按钮是否带有颜色,另外还可以控制内边距、阴影等等,还有一些自动调整宽度的配置。
完事之后直接点击复制,这里有几个选项,比如复制图片、URL 或者直接复制 iframe。
比如点击复制为 iframe 链接就会得到如下内容:
1 |
<iframe |
复制为 URL 就会直接得到一个可供使用的 URL:
1 |
https://carbon.now.sh/?bg=rgba%28255%2C255%2C255%2C1%29&t=material&wt=none&l=python&ds=true&dsyoff=20px&dsblur=68px&wc=true&wa=true&pv=0px&ph=0px&ln=false&fl=1&fm=Hack&fs=14px&lh=133%25&si=false&es=2x&wm=false&code=def%2520get_vowels%28string%29%253A%250A%2520%2520%2520%2520return%2520%255Bvowel%2520for%2520vowel%2520in%2520string%2520if%2520vowel%2520in%2520%27aeiou%27%255D%2520%250A%250Aprint%28%2522Vowels%2520are%253A%2522%252C%2520get_vowels%28%27This%2520is%2520some%2520random%2520string%27%29%29 |
有了 URL 之后我们可以到任意地址引用。
当然导出也是,可以选择导出矢量图 svg 还是 png,如图所示:

我的话一般都是点击复制,然后用我的 ipic 工具上传到 CDN 上面。
同时 carbon 还是开源的,GitHub 仓库地址是:https://github.com/carbon-app/carbon,其实这就是刚才我们看到的网站的源码,是基于 Node.js 开发的,扒一扒 package.json 源码:
1 |
"dependencies": { |
可以看到它主要基于 Next、React、CodeMirror 开发的,如果大家想基于此进行二次开发也可以,比如对接云存储,实现一些自动化等等。
如果觉得刚才的网站能够满足需求的话,那大可继续使用刚才的网站。
另外还有一个类似的 VS Code 插件,也可以实现类似的功能,我觉得还挺好用的,插件叫做 CodeSnap,现在已经十七万多次下载了。

大家在 VS Code 里面搜索生成就好了。
那怎么生成代码图片呢?
其实很简单,我们先选中想要分享的代码:

然后右键菜单选择 CodeSnap 即可,接着在 VS Code 面板就可以生成对应的代码预览效果了:

这时候我们可以点击上方的这个按钮,就可以直接把代码对应的图片下载下来了,如图所示:

得到的效果就和你自己编辑器里面看到的一样,是不是感觉很不错?
CodeSnap 也可以支持在 VSCode 里面更改 settings,目前支持如下内容:
1 |
codesnap.backgroundColor: The background color of the snippet's container. Can be any valid CSS color. |
关于更多的内容大家可以直接到 CodeSnap 插件的主页查看:https://marketplace.visualstudio.com/items?itemName=adpyke.codesnap
另外这里也顺便提下我的 VS Code 主题,我用的是 Community Material Theme 这个插件:

然后使用它提供的第一个默认主题:

如果大家觉得不错的话也欢迎试试哈~
希望对大家有帮助。
更多精彩内容,请关注我的公众号「进击的 Coder」和「崔庆才丨静觅」。
有时候我们可能为了测试各种各样的功能,需要用邮箱注册一些网站,然后过段时间就发现这个网站开始往我们的邮箱发送一些垃圾广告信息,比如如图所示:

很多邮箱服务有自动垃圾邮件分类的功能,但免不了的还是有些不好区分,来了不感兴趣的邮件我们还是要手动设置下规则,有时候关还关不掉。
如果我们只是为了简单测试某些功能,同时又不想发生上面的事情,那我们其实可以用一些小号邮箱来注册,或者生成一些临时邮箱来注册。
这里来介绍一个工具,帮助快速生成临时邮箱,简单好用。
这个工具叫做 tmpmail,GitHub 地址是 https://github.com/sdushantha/tmpmail,它就是一个简单的命令行 Shell 脚本,安装完了之后就可以使用了,Windows、Linux、Mac 上都是可用的。
由于我使用的是 Mac,这里介绍下 Mac 的安装方式,首先安装依赖:
1 |
brew install w3m curl jq |
然后根据 GitHub 对应的提示安装即可:
1 |
curl -L "https://git.io/tmpmail" > tmpmail && chmod +x tmpmail |
我们也可以把它移动到对应的系统路径下,比如 /usr/bin,/usr/local/bin 等:
1 |
mv tmpmail /usr/local/bin/ |
这样就安装好了,tmpmail 就可以正常使用了。
使用其实非常简单,首先我们使用 tmpmail 就可以生成一个临时邮箱:
1 |
tmpmail |
运行结果类似如下:
1 |
[ Inbox for hl9dvc3wbub@yoggm.com ] |
这里其实就是生成了一个临时邮箱,叫做 hl9dvc3wbub@yoggm.com,然后下面提示了 No new mail,就是没有新邮件的意思。
有朋友就会说了,咋没有密码啊?其实我们无需关心密码的对不对,我们只关心它收到的邮件内容就好了,比如我们应该是拿着这个邮箱去别的网站注册账号,然后网站会往这个邮箱发送一封激活邮件,点击就激活了。所以对于这个临时邮箱,我们只要能知道邮箱里面收到的邮件就好了。
所以 tmpmail 其实相当于帮我们维护了密码,我们无需关心,它可以自动帮我们把收件箱里面的邮件列出来。
OK,如果我们要更换邮箱也可以,直接重新生成一个就好了:
1 |
tmpmail --generate |
运行结果如下:
1 |
j2uabw3jmfn@wwjmp.com |
这样就重新生成了一个新的邮箱。
这时候重新运行 tmpmail,它就会使用当前最新生成的邮箱,运行结果如下:
1 |
[ Inbox for j2uabw3jmfn@wwjmp.com ] |
OK,准备工作就绪。
接下来我们就随便找个网站注册个账号试试吧。
比如 Zyte 这个平台,前身叫做 Scrapinghub,提供一些数据爬取的服务,网址是 https://www.zyte.com/,如图所示:

我们来注册下试试:

填上用户名之后,我们使用刚才 tmpmail 生成的临时邮箱来注册这个账号,输入密码之后点击注册。

这里 Zyte 就提示我们激活邮件就发送出去了,我们需要到对应邮箱里面查收激活链接并激活账号。
OK,回到 tmpmail,看看邮件收到没。
还是输入:
1 |
tmpmail |
这时候就可以看到如下运行结果了:
1 |
[ Inbox for j2uabw3jmfn@wwjmp.com ] |
非常赞,这里就显示了是 bounce+6ec610.a13e529-j2uabw3jmfn=wwjmp.com@mg.zyte.com 发送的邮件,邮件标题是 Zyte Email confirmation,然后最前面有个 ID,是 231112827。
P.S.:其实看着 Zyte 也是一个临时邮箱发送的这个邮件。
那这么打开这个邮件呢?很简单,tmpmail 命令加这个 ID 就好了:
1 |
tmpmail 231112827 |
运行结果如下:

这里就把邮件的内容展示出来了,内容就是感谢您的注册,然后点击链接激活即可,tmpmail 还自动解析了可点击的内容,比如超链接变成了可点击的内容,我们可以直接鼠标点击中间蓝色的 Confirm mail address 就在命令行下触发了链接的访问。
然后接下来命令行还显示了点击链接之后的网页内容:

基本上就是感谢您的注册,您的账户已经成功激活了。
完事了!
到现在为止我们就轻松利用 tmpmail 利用临时邮箱注册好了一个测试账号。
重新回到 Zyte 里面,输入刚才的邮箱和密码就成功登录进来了:

这里有代理服务、自动内容提取、云爬虫、Splash 渲染服务,大家感兴趣的话也可以试试看~
更多精彩内容,请关注我的公众号「进击的 Coder」和「崔庆才丨静觅」。
事情是这样的,最近组里新建了一个代码仓库来开发一个新的产品,再加上今天北京下大雨很多同事选择在家工作(包括我也是),于是我就选择用自己的个人电脑来工作。
但我的个人电脑里面的 Git 信息是用的我自己的个人邮箱:
1 |
git config --global user.name "Germey" |
这两行命令大家用过 Git 的肯定都敲过对吧?
这个配置是全局生效的,所以如果我用 Git 的 commit 命令来提交代码的话,那么 commit 的名字和邮箱就会变成刚才我配置的个人信息。
然后如果把代码推送到公司的代码仓库里面,里面就会出现一个奇奇怪怪的用户名和头像,就像这样子:

图中上面两次 commit 就是我用个人电脑提交的,最后的那次 commit 是我上周在公司用公司电脑提交的。
这是不是很奇怪?
如果其他人也用的个人邮箱提交,那公司代码库里面就会出现各种怪怪的提交人的记录,无从知晓。
这肯定不能忍啊,以后要是有谁写了奇怪的代码都不好查是谁写的。
于是乎,我灵机一动,想:为何不在提交代码的时候做一个限制呢?
能做到吗?当然可以!
这里就介绍一个知识点 - Git Hook,它的意思就是在 Git 各种事件执行前和执行后执行一些自定义的逻辑,比如说,我们定义一个 pre-commit 的 Git Hook,那就能在 commit 之前执行一些操作,我们定义一个 post-push 的 Git Hook,那就能在 push 操作之后执行一些操作。
有关具体的内容可以参考官方文档:https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
好,那这里我其实就是需要在 commit 之前做一下 Git 信息检查就好了,比如检查配置的邮箱不是工作邮箱,那就不允许执行 commit,所以就不会出现奇奇怪怪的 commit 记录了。
说干就干。
配置 Git Hook 的工具有很多,Git 有原生支持,当然我们也可以用第三方库来做。
目前我们的代码仓库是基于 Node.js 开发的,所以 Node.js 的项目配置 Git Hook 比较流行的解决方案就是 husky,所以这里我也用 husky 来做了。
首先安装下 husky:
1 |
yarn add husky |
然后配置一个 Node.js 的 prepare 命令,这个命令可以在装完包 Node.js 包之后自动执行,所以 prepare 命令就配置成 husky 初始化的脚本,package.json 里面增加如下配置:
1 |
{ |
OK,这样的话,其他人如果 clone 了这个仓库,装完所有 Node.js 包之后就会自动初始化 husky 的配置,然后在项目本地生成一个 .husky 的初始化目录,这样 Git Hook 就生效了。
Git Hook 生效之后,所有定义在 .husky 目录下的 Hook 脚本都会被应用,比如如果在 .husky 目录下添加一个 pre-commit 的脚本,那执行 commit 的之前,该脚本就会被预先执行做一些检查工作。
所以 .husky 目录下我就创建了一个 pre-commit 的脚本,写入了如下内容:
1 |
EMAIL=$(git config user.email) |
这是一个 Linux Shell 脚本,完全遵循 Shell 语法。
这里其实就是获取了 git config user.email 的返回结果,然后用正则表达式匹配是否符合公司邮箱格式,比如我们公司邮箱后缀当然是 microsoft.com 后缀,所以这里就用了 ^[.[:alnum:]]+@microsoft\.com$ 来进行匹配了。这里值得注意的是,为什么这里没有用 \S 来代表非空白字符,而是用了一个 [:alnum] 呢?这是因为 Bash Shell 本身不支持 \S 这种匹配,所以这里得换成 [:alnum]。
然后如果不匹配怎么办呢?
那就输出一些错误提示就好了,比如这里就提示请使用 git config —-local 命令来配置用户名和邮箱,之所以用-—local 是因为不想该配置影响全局的 Git 配置,所以这个配置只针对该仓库生效,然后 exit 1 就触发异常退出,程序运行终止,从而也不会触发 commit 命令了。
有了这个配置,我们来尝试下效果。
这会我没有做任何修改,Git 还是原来的配置,即我的全局个人邮箱配置。
这时候我执行下 commit 命令,就出现错误提示了:
1 |
Your git information is not valid |
很棒!检测出来了。
按照这个提示说的,然后我运行下配置命令:
1 |
git config --global user.name "Qingcai Cui" |
这里呢,我就配置了我的公司个人信息和公司邮箱。
然后重新再执行 commit 命令,就不会再出现如上的错误提示了!commit 成功!
大功告成!!!
有了它,我们就可以成功阻止一些奇奇怪怪的 commit 乱入公司的代码仓库了!
然后我把这个 PR 发出去了,有同事似乎也是深有感触,说道:

哈哈哈,有了这个,以后我们应该再也不会看到我们的代码仓库里面有 QQ 邮箱啦!
希望对大家有帮助~
更多精彩内容,请关注我的公众号「进击的 Coder」和「崔庆才丨静觅」。