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

-无业游民找工作莫得结果的第七天,继续人间小苦瓜和关键词云的爱恨情仇

快速指路:

1.1腾讯视频弹幕提取并制作关键词云1:弹幕在哪里

1.2腾讯视频弹幕提取并制作关键词云2:scrapy弹幕的获取

1.3企鹅弹幕提取并制作关键词云3:自动爬取全集+sql数据库写入

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()

结果展示:

6a4328dd6fa3d5293a2c9364fe2f02a5.png一共是截取到了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、付费专栏及课程。

余额充值