企鹅弹幕提取并制作关键词云3

-无业游民找工作莫得结果的第七天,继续人间小苦瓜和关键词云的爱恨情仇
快速指路:
1.1腾讯视频弹幕提取并制作关键词云1:弹幕在哪里
1.2腾讯视频弹幕提取并制作关键词云2:scrapy弹幕的获取
1.3企鹅弹幕提取并制作关键词云3:自动爬取全集+sql数据库写入
1.4企鹅弹幕提取并制作关键词云4:jieba分词+collections词频统计+wordcloud制作关键词云

1.3 scrapy爬取弹幕
爬取弹幕的部分在这一小节基本可以结束了。主要是对之前的代码进行修正和添加了SQL代码(真的是毕业之后就再也没用过数据库,语法都忘了好多。为了CDA的考试,就链接一下数据库吧。)
1.3.1 连续爬取一个视频的弹幕
如果需要爬取一集内的所有弹幕,就需要对timestamp进行一直叠加,直到返回的信息中“”count=0“”。
使用yield+用真循环。(停止条件需要放在处理response的函数中。自行补充XXXXX中的网址)

        while True:
            url = "https://XXXXXXXXX&timestamp={}".format(timestamp)
            yield scrapy.Request(url,callback=self.parse)
            timestamp=timestamp+15

yield:生成器
生成器是一个不断产生值的函数;一般和for循环配合使用。生成器每产生一个值(yield),当前函数冻结,值被保留,等待下一次调用之后再产生新的值。
{}.format(timestamp)
用timestamp的值来填充{}内的值。

1.3.2 如何停止爬虫
因为当前爬虫停止的条件是需要根据response的内容来判断的,因此用真的条件中无法有判断停止。
为此我找了很多办法,比如直接退出python程序等,但是效果都不好。在查找了多个资料资料之后,在巨人1的肩膀上发现了停止spider的办法。即在parse()函数中停止spider的代码如下:

from scrapy.exceptions import CloseSpider
def parse(self, response):
	if count==0:
		raise CloseSpider('close it')

在这里只截取关于本爬虫使用的方法介绍,更多的办法可以查看Reference中巨人1的肩膀。
特点:发送此信号的时候,实际上还有一些在列队中的url,需要完成才会停止。类似当运行的时候,使用ctrl c停止一样。

1.3.3 写入数据库
连接的数据库:sqlserver
python连接数据库使用的库为:pymssql
我目前为止直接去了四个值存入数据库:commentid,content,opername,uservip_degree

import pymssql #导入库
connect = pymssql.connect('localhost', 'sa', '**', 'danmu')  # 服务器名,账户,密码,数据库名
cs1=connect.cursor() #获取cursor对象
#因为需要根据response的内容进行补全valuse中的值,需要使用%s
query='INSERT INTO danmu_IF (commentid,content,opername,uservip_degree) VALUES(%s,%s,%s,%s)'

接下来的我们需要对json文件进行逐行读取,然后再加入数据库中,因此真正构建sql的insert语句需要放在json的for循环中。

1.3.4 json类型循环逐行读取

for danmu_1 in danmu["comments"]:
	commentid=danmu_1["commentid"]
	content=danmu_1["content"]
	opername=danmu_1["opername"]
	#valus值构成
	values=(commentid,content,opername,uservip_degree)
	#生成sql语句
	cs1.execute(query,values)
	#提交之前的操作,如果之前已经执行多次的execute,那么就都进行提交
	connect.commit()

1.3.5 关闭sql语句

 # 关闭cursor对象
 cs1.close()
 # 关闭connection对象
 conn.close()

结果展示:
在这里插入图片描述一共是截取到了33517个弹幕,出现的情况:
1.运行过程中有发现sql数据库的报错,怀疑可能的原因是因为弹幕中存在着不可识别的字符。
2.发现关闭spider的时间会稍稍比yield生成器生成的慢一些些。怀疑是因为线程的原因。

不过,不论如何,企鹅弹幕爬取就先告一段落啦。接下来就是弹幕云的制作了,继续摸索吧。革命尚未成功,同志仍需努力啊哭唧唧。

备注一下今天用到的sql语句,真的是本科毕业之后就再也没用过sql了,研究生的论文为了少配置环境直接用了文本存储信息,为了CDA拼了老命害。

/*删除表中的所有信息,且不做单独操作*/
TRUNCATE TABLE danmu_IF  
/*返回top100的内容*/
SELECT TOP (100) [commentid]
      ,[content]
      ,[opername]
      ,[uservip_degree]
  FROM [danmu].[dbo].[danmu_IF] 

Reference:
巨人1的肩膀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值