2020/04/19 10-scrapy-redis组件使用和豆瓣影评爬取

scrapy,学到了redis框架后,给scrapy引入了scrapy-redis组件,分布式组件,应用了redis的特点。
scheduler是scrapy框架提供的,是内存中的结构,用来保存请求对象,去重。
现在想把相关数据放到redis中去,不再用以前的scheduler,可以用redis的set去重,从redis取出这些请求,发起下载的请求,下载之后给spider继续处理,当再次提取请求,给scheduler,实际上就是给redis。如果数据给item pipeline,可以选择将数据存入redis,redis就可以将item一条条塞到redis当中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

需要一些依赖

在这里插入图片描述
在这里插入图片描述
在整个scheduler准备存储请求队列放在reids中,以前的队列在scrapy框架中存储的,现在放到了redis中
在这里插入图片描述
重复之后如何filter的问题,也就是说这是去重组件
在这里插入图片描述
最后如果拿到了一个个item,想要塞到redis里,就要写一个pipeline,这里帮我们写好了,直接调用一下即可
在这里插入图片描述
这个key比较重要,可以自己设定下,也可以用缺省
在这里插入图片描述
链接redis的地址端口

在这里插入图片描述
可以在配置文件给出,或者不给出,如果不给,会有动作等着你给出

在这里插入图片描述
scheduler本质上是普通队列,改成了redis,可以提供多爬虫多进程共享,并行能力增强。
duplication filter scrapy本质上使用ste来去重。reids里就用redis的set来去重

item pipeline,提供了一个增强的组件,可以将我们的item存入到redis中
base spiders,提供了一个基本使用的基类,我们以前使用的是crawlspider,spider,也就是scrapy提供的是spider类或者crawlspider,这里提供了redisspider,如果使用了crawlspider现在就要用redisspider,因为这样就把起始的url改了,以后就跑redis的scheduler去读数据了

在这里插入图片描述
在这里插入图片描述

这次准备爬取影评
在这里插入图片描述
有些公司就关注热门电影,然后可以卖卖周边
在这里插入图片描述
模拟找到第一个在这里插入图片描述
提取链接点击进来
在这里插入图片描述
影评在下面
在这里插入图片描述

在这里插入图片描述
这个链接中间有3878007

在这里插入图片描述
两个url就是后面部分的差异

在这里插入图片描述
如果分析到了电影首页的url,评论的url地址就也知道了

我们就可以分析围绕这不电影的经常出现的词汇是什么
在这里插入图片描述
看一下后一页的地址
在这里插入图片描述

在这里插入图片描述
start类似偏移,limit类似限制

在这里插入图片描述
测试下来limit好像没什么用
在这里插入图片描述
start改成400就要求你登录了
在这里插入图片描述
实际上能给显示的就这么多了,有些的网站反爬就这样,不给你了
在这里插入图片描述
虚拟环境,指定一下虚拟环境,下一回在部署的时候到里面把一些依赖的库,install-all把requestments导入进去

用当前目录作为项目根目录

在这里插入图片描述
看一下有什么模版

在这里插入图片描述
装了scrapy-redis后,并没有提供第三个模版

在这里插入图片描述
还是用crawl模版,这样可以继续提取
在这里插入图片描述
在这里插入图片描述
第一页就是0
在这里插入图片描述
起始页作为第一页,从这开始就要分析内容,其实主要是分析后一页元素就可以搞定了
在这里插入图片描述
其实就是下一页下一页提取就可以了

这是官网

在这里插入图片描述
在这里插入图片描述
redis启动了,这样我们就可以使用

在这里插入图片描述
现在是主的状态,把数据清理掉
在这里插入图片描述
在配置文件里加上,scheduler到redis里去,去重也是用scrapy-redis提供的类
在这里插入图片描述
user-agent和遵守robots协议改一下
在这里插入图片描述
在这里插入图片描述
整个持久化是scheudler的持久化,爬完之后是否从scheduler中清除

在这里插入图片描述
这个pipeline比较重要
在这里插入图片描述

默认的pipeline是什么都不做,默认往后一扔
在这里插入图片描述
做一些操作,需要抢在它前面执行,在redis存贮之前,要自己写pipeline在它之前把事情做完即可
在这里插入图片描述
链接地址也需要改下
在这里插入图片描述
在这里插入图片描述
要什么数据需要解决掉,我们需要短评short数据
在这里插入图片描述
这样直接拿到了20条数据

在这里插入图片描述
这样更加保险点
在这里插入图片描述
在这里插入图片描述
从start_urls开始爬取第一个页面,到下面提取前一页后一页,放到redis scheduler中放到redis中
在这里插入图片描述
最好把item写一下
在这里插入图片描述
一个斜杠直接取就可以了
在这里插入图片描述
上面取出来是selectorlist,要把data属性抽出来,变成普通列表,普通列表一般要第一个,列表中的第一个元素拿出来
在这里插入图片描述
我们把数据爬过来到redis,这样别人就可以进行建模来分析,打印一下看看
在这里插入图片描述
现在准备爬了
在这里插入图片描述
现在就爬到一大堆数据
在这里插入图片描述

在这里插入图片描述
这次爬的慢点

在这里插入图片描述
这里就有东西了

在这里插入图片描述
这里是什么可以拿出来

再慢一点

在这里插入图片描述

在增加,有点类型md5之后的东西,有人给你去重在这里插入图片描述
这里是set,不然不set,无法去重,到最后下一页都是空白,几次之后,提取不到信息,就整个程序下载结束
在这里插入图片描述
爬完数据就没了
在这里插入图片描述
之前取的名字是这个作为前缀的

在这里插入图片描述
这是用传统方式,只不过告诉scheduler变了,如果用的是redisspider,清用它redisspider的子类,

在这里插入图片描述
如果用crawlspier,在前面加redis即可
在这里插入图片描述

基于这个,要解决parse,还要解决回调函数的问题
在这里插入图片描述
在这里插入图片描述
现在就卡住了,告诉你数据的起始url放到一个地方去,放到redis当中去
在这里插入图片描述
现在这句话相当于没用了
在这里插入图片描述
使用这一句,把url推进去
在这里插入图片描述
从左推和右推都一样,会挨个将里面的url从列表里拿出来

在这里插入图片描述

再执行一次
在这里插入图片描述
敲一下

在这里插入图片描述
现在就开始爬了
在这里插入图片描述在这里插入图片描述
现在强行终止,里面都来不及清理
在这里插入图片描述
现在是我们要往里面注入一个起始的url,从起始开始,将起始得到的数据,按照我们的处理返回

在这里插入图片描述
打开一下pipeline在这里插入图片描述
重新爬取

在这里插入图片描述
再次给起始url

在这里插入图片描述
现在itempipeline就帮我们得到了信息

在这里插入图片描述
这边爬完之后,也就没有必要保留了
在这里插入图片描述
403代表你要登录了
在这里插入图片描述
现在就拿到这么点数据,item会保留下来,dupefilter爬取完之后会消失,这个item就是数据源,可以认为这个redis在这里更像是一个队列
在这里插入图片描述
爬取将数据一个个爬过来之后,打到redis队列里,有我们爬取的一个个item

在这里插入图片描述
这些item爬取之后,我们就要分析了,现在能读取到两样东西
在这里插入图片描述
只关心reviewer,这是个list,lrange从0,-1全部取出来,但是实际读出来的时候,最好分批读,现在读到的内容,最后返回的是一个列表
在这里插入图片描述
现在拿到reviewlist,看看里面打印出来是什么类型,是bytes,bytes说白了就是字符串,拿到的就是评论的字符串

在这里插入图片描述
打印一下评论字符串,这个里面是中括号,可以json一下
在这里插入图片描述
json.loads就转到我们想要的数据了
在这里插入图片描述
怕出错可以try一下
在这里插入图片描述
拿到review之后要提取出里面的数据
在这里插入图片描述
数据好像有些不对
在这里插入图片描述
这样打印就一行行整齐了

在这里插入图片描述
换行符,看一下文本

在这里插入图片描述在这里插入图片描述
有些爬虫就定期的对热点电影进行爬取

在这里插入图片描述
进入到电影的详情页,再点进去就是评论页

在这里插入图片描述
用这种方式就可以提取影评了
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

创建一个爬虫就开始编写
在这里插入图片描述
在这里插入图片描述
按照官方的意思要换掉,换掉之后就卡着了,需要一个启动的东西
在这里插入图片描述
启动的东西就是这个东西,我们lpush就可以写进去了,一般启动一下让爬虫继续爬就可以了

在这里插入图片描述

在这里插入图片描述
这样就开始爬取,如果要存储到redis种,下一步我们要进行分析redis里的item数据,然后对数据进行分析
在这里插入图片描述
在这里插入图片描述
我们使用的中文,跟拉丁字母最大区别就是,他们的字不能链接在一起,连在一起没办法读了

在这里插入图片描述
比如按’来‘,还是‘来到’分词,中文分词是很麻烦的事情
在这里插入图片描述
,中文分词是很麻烦的事情,
中国煤 都是
中国 煤都 是,拉丁语系分支出来了法语,意大利语,德语,他们都是拼写的,我们中文是方块字,所以中文的分词要专门的工具,现在有一个比较好用的jieba分词

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
它提供了几种方式,
精确模式
全模式,把句子中所有可以成词的词语都扫描出来,但不能解决歧义

在这里插入图片描述
安装

在这里插入图片描述
在这里插入图片描述
主要功能就这几个
在这里插入图片描述
现在测试一下全模式,把几乎成词的都提取出来

在这里插入图片描述
精确模式,就是缺省模式
在这里插入图片描述
json后面是一个可迭代对象,应该是调用cut方法切出来的
在这里插入图片描述
generator是个生成器,cut是生成的一个生成器
在这里插入图片描述

这两个效果是一样的
在这里插入图片描述
lcut,这个l是list,就直接变成了一个list
在这里插入图片描述
下面也改成l的版本试试,搜索引擎的模式就尽量关键词多,竟可能 去里面提取出来常用的keyword提取出来使用。可以把keyword做成索引,以后计算,就跟这条语句有一定关系
在这里插入图片描述
我们使用cut版本,精确模式就够了,生成器版本更加方便点
在这里插入图片描述
现在到redis里进行分析,切换之后是一个个词,这边做下单词统计
在这里插入图片描述
取倒排前10名,不反转是升序的,所以要反转,但是前面的我们并不想要
在这里插入图片描述
可以建立一些词,是非必要的,放在列表里,比如的 啊,这样的冠词虚词 ,停用词,符号,全角半角字符
在这里插入图片描述
在这里插入图片描述
现在第一件事就是读取停用词
在这里插入图片描述
先读取停用词
在这里插入图片描述
可以用rstrip顺便把后面的换行符删除

在这里插入图片描述
前面的可能有用

在这里插入图片描述
做文件操作的时候,最好指明编码,这样就拿到了停用词
在这里插入图片描述
将这些词汇全部加到停用词里
在这里插入图片描述
下面就可以取消注释,读取redis数据,提取之后将单词进行统计
在这里插入图片描述
如果不在停用词中才有必要去记录一下
在这里插入图片描述
现在把空格去掉
在这里插入图片描述
把空格加下,反正set去重

在这里插入图片描述
现在才是稍微有点意义,明显感觉还往是dc电影
在这里插入图片描述
顺便把\n也去掉了
在这里插入图片描述
现在就得到了词的统计值
在这里插入图片描述
现在原来的文章排除掉了停用词,提取出比较有用的词做相应统计,map之后统计,然后reduce,最后排个序
在这里插入图片描述
有一个词云
在这里插入图片描述
在这里插入图片描述
比重大的,有些网站就用词云来展示

在这里插入图片描述
在这里插入图片描述
在这里用这种方式就可以创建了

在这里插入图片描述
在画图里面很有名,matplotlib,pandas,分析领域的,开始安装
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
最常用的方法,现在我拿到了词的统计数,没有拿到频率
在这里插入图片描述
这是一些参数
在这里插入图片描述
词以及它的频率,应该是所有统计词的count值,所以之前算一个total值,这样一遍就知道了统计多少个

在这里插入图片描述
打印一下频率
在这里插入图片描述
在这里插入图片描述
有了这个频率就可以用词云了
在这里插入图片描述
用的时候按照这种方式来用

在这里插入图片描述
把matplotlib引进来

在这里插入图片描述

wordcloud提供了一个函数
在这里插入图片描述
坐标系就不打印了,imgshow就是图显示在坐标系上

在这里插入图片描述
在这里插入图片描述
就这个东西

在这里插入图片描述
往大了调
在这里插入图片描述
这样就清楚点,这样商家就可以根据这些基础热点做一些商品推荐
在这里插入图片描述

现在redis可能在修改开源协定,因为有些云厂商太过分,这个词云也是有些是收费的
在这里插入图片描述
其实scrapy爬取是没什么,剩下是如何分析的问题,通用的存放数据的文件系统,stech,这些分布式文件系统可以跨物理磁盘,逻辑来组织你 存储,这样可以 把海量数据放在分布式文件系统中,到时候可以直接分析磁盘上存储的数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值