项目介绍
网站外链爬虫,使用轻量级 Web 应用框架 Flask,以 Restful 接口提供服务,支持容器化部署。项目地址:https://github.com/s1mplecc/external-link-crawler ,需要 Python 版本 3.x。
对于传入的网站 URL,获取其 HTML 网页,提取外部链接的域名。包含如下几类外链:
- 超链接,标签
a
下的href
属性; - 图片,标签
img
下的src
属性; - 外部样式文件,标签
link
下href
属性; - 外部 JavaScript 脚本文件,标签
script
下src
属性。
本地运行
Step 1:克隆项目。
1 | git clone https://github.com/s1mplecc/external-link-crawler.git |
Step 2:安装依赖,包括 Flask 和 BeautifulSoup4。建议使用 Virtualenv 局部安装依赖。
1 | pip3 install -r requirements.txt |
Step 3:在 IDE 中运行或通过 Flask 命令行工具启动应用,端口号默认为 5000。生产环境可使用 Gunicorn 部署。
1 | export FLASK_ENV="development" |
容器化部署
除本地运行之外,也支持在生产环境中使用容器化方式部署,镜像入口脚本如下:
1 | !/bin/sh |
使用 Gunicorn 启动 Flask 应用。由于爬虫运行效率主要受网络延迟影响,因此为提高并发吞吐量,使用多进程 + 协程方式部署。协程由 Gevent 库支持。参数 -w
指定进程数,每个进程默认最大并发连接数 1000。Gunicorn 应用端口号默认为 8000。
Step 1:拉取镜像。镜像已提交至 Docker Hub 仓库。
1 | docker pull s1mplecc/external-link-crawler |
也可以在本地手动构建镜像。克隆下项目后,在 Dockerfile 所在目录执行:
1 | docker build -t s1mplecc/external-link-crawler . |
Step 2:启动容器,映射端口。
1 | docker run -d -p 5000:8000 --name external-link-crawler s1mplecc/external-link-crawler |
请求格式
- 请求类型 GET;
- 请求前缀
/external-link-domains
; - 参数
url
,需传入合法 URL,否则返回参数异常状态码。
1 | curl -XGET "http://127.0.0.1:5000/external-link-domains?url=https://www.zhihu.com/" |
响应格式
响应体为 JSON 格式,包含如下字段:
data
字段,数据本体;code
字段,状态码。成功 - 200,参数异常 - 400,服务器内部错误 - 500;messages
字段,附加消息。出错时提示异常信息。
响应样例如下:
1 | { |
参数异常响应样例如下:
1 | { |
镜像构建过程
Step 1:编写 Dockerfile。镜像基于 Python 官方镜像 3.8-slim 精简版本。将整个项目文件拷贝到镜像的工作目录内,在 .dockerignore
中指定忽略拷贝文件。入口文件为 Gunicorn 启动脚本。
1 | FROM python:3.8-slim |
Step 2:构建镜像。
1 | docker build -t s1mplecc/external-link-crawler . |
Step 3:推送到远端仓库。
1 | docker tag s1mplecc/external-link-crawler docker.io/s1mplecc/external-link-crawler |