美文网首页架构之路PythonAmazing Arch
自研文章爬取系统方案设计

自研文章爬取系统方案设计

作者: caison | 来源:发表于2018-11-30 23:00 被阅读1次

1 系统设计分析

1.1 需求介绍

目前已有社区内容系统的文章数据较少,文章质量普遍较低,为了丰富文章内容,增加用户粘性,需要想办法从其他地方爬取文章数据,丰富社区内容系统的文章。为此,需要设计一个文章内容爬取系统,负责爬取、清洗、保存文章。

1.2 系统复杂度分析

整个系统的复杂度分析如下:

优先重点考虑

  • 可扩展
    系统需要适配爬取多个不同的数据平台,有可能是今日头条,微信公众号,等等其他平台,后续还会扩展接入其他平台,需要支持可方便扩展接入。

  • 低成本
    系统要基于现有的有限开发资源开发,整系统使用上尽量减低人力成本,减轻相关内容运营人员的工作量,做到简单实用。

相对重点考虑

  • 高性能
    因为系统定位是一个内容爬取系统,系统没有直接对接用户,用户感知不到,性能要求不是特别高。

  • 高可用
    同样系统没有直接对接用户,允许系统故障一段时间,待发现后再手工恢复。

2 架构设计

2.1 整体架构设计

系统整体架构设计

整体分为数据抽取层、数据中间存储层、数据转换存储层3层,实现数据抽取,转换,存储一系列操作,通过分层结构解耦各层的联系,方便系统后续扩展。

比如后续想再新增xx网站的爬虫,其他地方不用修改,只需新增爬虫模块即可。
或者后续业务库表发生变更,其他模块不用修改,只需要修改文章数据转换审核系统。

2.2 数据抽取层——爬虫模块设计

数据抽取层由具体对接各个不同数据源的爬虫组成,这些爬虫负责从数据源爬取定时数据,做简单数据处理后把数据保存到中间存储层。模块基本设计如下:

爬虫模块设计

整个模块基于Python3的Scrapy框架,主要由3个基本对象组成:

  • Downloader 下载器
    http请求工具,负责发送http request到被爬取的网站,把网站返回的Responses传给Spiders

  • Spiders 数据解析器
    用于数据解析,主要负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据

  • Item Pipeline 数据存储器
    用于数据存储,把数据保存到中间存储层,同时负责内容去重。
    内容去重也需要基于数据存储,因为不同网站的爬虫的去重字段,去重逻辑不一致,这里不归到中间存储,还是属于网站爬虫的部分。

实际开发去重方案可以根据实际情况灵活调整优化,如果知道内容已经爬取过,可以灵活制定策略避免重复爬取。

2.3 数据中间存储层设计

负责临时存储文章数据,保存文章最基本数据,包括标题,内容等信息。存储备选方案:

  • MySQL
  • MongoDB
  • MQ(Kafka等)
    这里考虑简单满足需求,容易运维的话,MySQL 能满足当前业务需求,所以考虑选择MySQL。

2.4 数据存储转换层设计

负责从中间存储层读取数据,然后进行数据报文转换,例如加文章封面图,待运营人员审核通过后把文章写入文章业务库表。基本设计如下:

数据转换审核系统
  • 审核、编辑
    这一步需要运营编辑人员干预,在页面上对文章进行审核,编辑,审核通过才进行后续操作。

  • 图片地址转储
    将文章中的图片下载下来,重新上传到CDN下。

  • 字段填充转换
    文章封面图,文章创建人,文章分类信息等字段填充转换

  • 审核文章存储
    保存待审核,审核通过的文章,后续将写入业务库表。

3 总结

整个系统架构设计遵循如下原则:

  • 合适原则——合适优于业界领先
  • 简单原则——简单优于复杂
  • 演化原则——演化优于一步到位

架构设计的目的在于解决系统复杂度问题,真正优秀的架构都是企业当前人力、条件、业务等各种约束下设计出来的,能够合理地将资源整合在一起并发挥出最大功效、并且能够快速落地。

参考

小白进阶之Scrapy第一篇
scrapy入门教程

相关文章

  • 自研文章爬取系统方案设计

    1 系统设计分析 1.1 需求介绍 目前已有社区内容系统的文章数据较少,文章质量普遍较低,为了丰富文章内容,增加用...

  • 自研IM系统方案设计

    本文主要介绍APP功能中的IM模块的设计方案 1 设计原则 合适原则——合适优于业界领先 简单原则——简单优于复杂...

  • Python 实战项目

    web机器人 web实战 博客BBS论坛系统 成绩管理系统 新闻系统 爬取知乎 爬取豆瓣 爬取京东 爬取新浪微博 ...

  • 5.22跃评运营早报

    华为自研系统可期,星巴克到店取,液体坚果,王源抽烟…… 1、华为余承东:自研操作系统最快今秋面市 兼容安卓 华为消...

  • node网络爬虫

    爬取读者文章网易云音乐封面pm2.5爬取音悦台 MV 系统:windows、Mac、linux 适用 运行环境:n...

  • Scrapy + Selenium 爬取简书网

    1. 项目思路 需求:1. 爬取简书上的所有文章;2. 爬取文章的标签;3. 爬取文章的作者信息、浏览量、字数、评...

  • 第六章 spider批量爬取伯乐在线所有文章

    如何通过spider完成伯乐在线上大量文章的批量爬取 首先,我们需要通过列表页爬取所有文章的url,前面部分只爬取...

  • 微信公众号及服务号文章爬取

    使用Python爬取公众号文章主要两种方法: 通过爬取第三方公众号聚合网站 通过微信公众平台引用文章接口 通过爬取...

  • Python爬虫:如何爬取分页数据?

    上一篇文章《产品经理学Python:如何爬取单页数据?》中说了爬取单页数据的方法,这篇文章详细解释如何爬取多页数据...

  • 28-rvest包爬取科学辟谣网

    1、加载R包 2、伪造访问终端 3、爬取分类列表及其链接 4、构造爬取每一篇文章的函数 5、爬取各类别文章数量 6...

网友评论

    本文标题:自研文章爬取系统方案设计

    本文链接:https://www.haomeiwen.com/subject/uppccqtx.html