前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用scrapy进行八千万用户数据爬取与优化(一)

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

作者头像
星星在线
发布2018-08-21 10:28:18
2K0
发布2018-08-21 10:28:18
举报

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

爬取信息分析

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

第一个是喜马拉雅好声音,官方的账号,很多人的喜马拉雅账号应该会默认关注这个。我们看到粉丝关注数有八千多万,实际的喜马拉雅用户量肯定超过这个数值,我们暂且估计可爬取数量为一亿,主播页面只显示五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. 抓取数据清理,数据分析规划
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python爬虫实战之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 爬取信息分析
  • 爬取技术选择
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档