记一次爬虫实现


一.前言

本次记录一个爬虫爬虫实现,包括整体架构,爬虫实现逻辑,多平台数据联动。

二.环境

1.操作系统

本次在MAC上进行代码开发,使用Git将代码部署到MAC和Linux(ubuntu)服务器上。

2.开发语言

本次使用Python3作为主要语言,用于爬虫的撰写以及数据队列的处理,接口访问。

3.涉及工具

  1. Python3 本次主要开发语言
  2. Redis 用于存储爬虫解析队列以及任务下载队列
  3. Django 用于相关接口撰写以及后端服务提供
  4. 前端语言(html、js、css)用于前端界面的绘制
  5. MySQL数据库 用于存储资源的一些基本信息
  6. ffmpeg 用于下载资源、音轨处理
  7. wcscmd工具 用于上传资源

三.需求&实现

1.需求

输入指定的视频资源,解析出视频真实地址以及相关视频播放地址,入库基本信息、下载、上传视频到cdn服务器,完成后标记此视频资源以及相关视频资源。

2.实现

本次使用三台Linux服务器、一台MAC Book完成整个流程
为了表述方便,在此标记:
服务器1:Linux服务器,向解析队列添加任务
服务器2:Linux服务器,从下载队列拿取任务,进行下载、上传、标记
服务器3:Linux服务器,部署了Redis,提供接口服务
解析机器:MAC Book笔记本
队列1:解析队列
队列2:下载队列
接口1:取解析任务接口
接口2:回传下载任务接口

3.整体架构

在这里插入图片描述

四.技术细节

1.任务添加

解析任务的添加是通过用户在以Django作为后台的前端页面添加的,用户添加了相关资源的地址,就会通过Redis直接放入解析队列中,解析队列的数据结构为:list。

2.爬虫

通过前期的调研,发现目标网站存在多钟反爬措施(鉴权、验证码、开发者工具监控、JS监控),使用传统的requests无法得到想要的数据。
本次爬虫使用了undetected_chromedriver,此第三方库功能类似于selenium,但是却胜于selenium, 可以防止浏览器特征被识别,可以 解决被某些网站反爬导致的selenium 无法访问或 滑块验证失败等问题。
爬虫是部署在MAC Book上的,通过接口1拿到解析任务。本次爬虫使用undetected_chromedriver开启日志性能监听、记录访问中的日志(包括并不限于请求地址、参数、响应体…),通过设置显、隐式等待、调用相关JS命令、日志过滤提取出指定的资源地址,最后将地址通过接口2回传到下载队列,下载队列数据结构为:list,方法为lpush。至此解析机器就完成了它的使命。

3.下载、入库

服务器2从下载队列中拿到下载任务,为了保证一致性使用rpop拿取下载任务,先对视频的基本信息进行入库,然后使用ffmpeg工具对资源进行下载,下载资源到本地服务器指定位置,借助wcscmd工具上传到CDN服务器,删除本地资源,通过对MySQL数据进行标记,标记资源的可用性,至此就完成了整个的实现流程。

五.总结

本次撰写本篇记录了一次爬虫的实现,整个流程都是笔者亲自操刀的,在此只是提供一个解决问题的思路。在部署时,要根据具体的业务需求,选择合适的服务器,尽量不要浪费服务器资源,减少与其他业务的耦合,能够我们后期维护、查错的工作量。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/a1397852386/article/details/127344325