专栏首页python爬虫实战之路利用scrapy进行八千万用户数据爬取与优化(一)

利用scrapy进行八千万用户数据爬取与优化(一)

最近准备把数据分析这块补一下,加上一直在听喜马拉雅的直播,有一个比较喜欢的主播,突然萌生了爬取喜马拉雅所有主播信息以及打赏信息,来找一找喜马拉雅上比较火的主播和有钱的大哥,看看这些有钱人是怎么挥霍的。

爬取信息分析

打开喜马拉雅的主播页面,查看人气主播

第一个是喜马拉雅好声音,官方的账号,很多人的喜马拉雅账号应该会默认关注这个。我们看到粉丝关注数有八千多万,实际的喜马拉雅用户量肯定超过这个数值,我们暂且估计可爬取数量为一亿,主播页面只显示五50页,每页20个用户,我的思路是爬取显示的主播信息,进入主播主页

爬取相关信息,然后查看粉丝信息

粉丝页只显示10页,每页10个用户。虽然看起来不多,但是我们可以进行扩展,每个粉丝点进去后又是一个用户主页,又可以爬取他的粉丝信息。就这样一直进行扩展,然后使用去重处理,过滤已经爬取过的用户数据。

我们要爬取的数据:用户名、简介、粉丝数、关注数、声音、专辑数。

另外还有赞赏信息需要通过APP抓取,我们先抓用户信息吧。

爬取技术选择

这么大量的数据爬取,优秀的框架是必不可少的,我们就使用大名鼎鼎的scrapy框架为基础来进行爬取。另外分布式爬取也是必不可少,虽然我没有那么多机器去做,但是我琢磨了一下,百度云、阿里云、腾讯云、华为云等一系列云服务器新用户都有几天试用期,这集群机器不就有了吗?嘿嘿

数据库我们使用MongoDB,因为我们的数据并不要求多精确。Redis肯定是必选了。但是作为内存数据库,占用内存的大小这就是我们必须要考虑的。我们的去重过滤都是放在redis中的,所以必须对齐进行优化。具体原因请看:

redis存储为什么必须优化?

我先在自己机器上抓取了部分数据,查看redis中的请求列表和去重列表

从请求列表中的数据量可以知道下载还是比较慢的,这就是为什么我们要用分布式进行爬取了。然后再看去重数据,七十五万条。不大的数据量,但是看下内存占用情况。

执行删除语句flushall后,再查看内存使用情况

在我8G内存的Mac上占用260M的内存可以忍受,但是在我那可怜的只有1G的云服务器上,卡到我都快链接不上了,我们可是以八千万数据为目标的,实际才爬取了二十多万条有效数据,去重记录都七十多万了,如果到了一亿条数据,以目前的情况来看,卡爆服务器也到不了。

本来还有一个xmla:items结构,存储我们的抓取数据,我把它提取到了MongoDB当中。xmla:requests中是待爬取请求列表,我们爬取下载的时候这个数据量还是会逐渐减少的,至少不会无限增大。但是这个xmla:dupefilter中存取的是去重数据,每一次请求都会记录下来,所以这个数据只会随着我们的爬取一直增大。那么这就是我们要进行优化的重点。

下面我们来规划一下下来要做的事情,按步骤来:

  1. docker环境安装部署
  2. redis集群配置操作
  3. 用户数据抓取流程分析
  4. 用户打赏信息抓取流程分析
  5. 使用BloomFilter修改scrapy-redis,减少过滤内存占用
  6. 反爬处理:IP代理池、User-Agent池
  7. 使用Gerapy和docker部署分布式环境
  8. 抓取数据清理,数据分析规划

本文分享自微信公众号 - python爬虫实战之路(gh_f26a568fdea8),作者:星星o在线

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 告诉你最简单的方式搭建MySQL、Redis、MongoDB数据库

    数据库在我们日常开发中接触是很多的,平时自己没事写一些东西也经常会用到,之前专门写过安装MySQL、Redis、MongoDB的文章,各种安装配置还是比较麻烦的...

    星星在线
  • docker配置redis集群和scrapyd服务

    Redis集群的配置方式我们上一篇已经介绍过了,而且使用Dockerfile配置文件我们也介绍了,不过介绍的并不详细,可能有些人看不明白,这篇我们再介绍一些Do...

    星星在线
  • Jenkins增加节点的两种方式

    单节点的Jenkins在实际生产中是很少使用的,满足不了生产环境的业务,所以我们一定是使用Jenkins集群来做持续集成,Jenkins的集群搭建是非常简单的,...

    星星在线
  • 微软收购LinkedIn:数据之争

    你可能会好奇,这和数据有什么关系?先让我们简短回顾下微软的发展史。在传统的软件年代,微软的操作系统、办公软件和浏览器可谓叱咤风云,让其赚的盆满钵满。那个时候用户...

    华章科技
  • 关联规则(一):基本原理

    参数化方法包括分类、回归等模型,优点是用少量的参数简化了建模问题,主要缺点是初始假设在许多实际问题中不成立,导致误差过大。

    fireWang
  • Resolved versions for app (26.1.0) and test app (27.1.1) differ.

    这个报错我相信很多人都遇到过,我对此也是不胜其烦,尝试多次之后找到几个解决的办法。起因就是我的项目同时引用了不同的版本的同一个工具包或是依赖,导致的内部冲突

    晨曦_LLW
  • 惠普收购网络安全创企 Niara,康美药业等拟50亿元设立大健康产业基金 | 大数据周周看

    数据猿导读 康美药业与深圳瑞元、粤财信托共拟50亿元设立大健康产业基金;惠普收购美国网络安全创企 Niara,增强自身物联网网络安全能力;数字媒体产品开发公司“...

    数据猿
  • 独家 | 一文读懂TensorFlow(附代码、学习资料)

    人工智能、机器学习和深度学习 在介绍TensorFlow(以下简称为TF)之前,我们首先了解一下相关背景。 TF是一种机器学习框架,而机器学习经常和人工智能,...

    数据派THU
  • tf.shape

    原链接: https://tensorflow.google.cn/versions/r1.9/api_docs/python/tf/shape?hl=en

    于小勇
  • 细数数据科学团队中的十大关键角色

    应用数据科学是一项高度跨学科的团队工作,需要用多样性的角度看问题。事实上,比起专业知识和经验,观点和态度的重要性也不容小觑。以下是我对数据科学团队构成的看法。

    CDA数据分析师

扫码关注云+社区

领取腾讯云代金券