由于公司需要监控到不同时间段用户观点的变化,需要爬取各个平台下我们用户的评论,因此,B站评论爬取的需求诞生啦!!~~看了网上的其他教程,都没有我这个类型的(大多数是普通的up上传的视频),我这个呢,是官方游戏主页(也许可以这么叫吧,我也不知道,反正就是从地址上看就不大一样,是http://www.biligame.com开头的)
那么这种特别一点的评论要怎么爬取呢?接下来我们一起来解决吧~
查找评论
在进行爬虫之前,我们先进入游戏中,看一看评论长什么样。
输入你关注的游戏的网址,点击评论
选择一条评论,按下F12,选择network,可以看到评论返回的内容
这里可能会踩坑,就是你直接F12选择network 出来,像其他教程一样去找web?开头的返回,是没有response的、你需要首先选择一条评论,F12,在element里面找到它,然后再点击network,然后选择page?开头的返回
观察这个评论的返回地址
可以看到,page_num=1,表示当前是第一页。我们修改page_num就可以对评论进行翻页
开始爬虫
既然评论的地址已经知道了,那么就让python小朋友来帮助我们爬取数据吧
在开始之前需要说明一点:
为了防止被反爬,每爬取一页都随机停顿1~3秒。如果以后b站的反爬更严格的话,可以把这个时间加长一点点
下面上代码
import requests
import json
import random
import os
import pandas as pd
import time
import sys
def B_station_scrapy():
url_base='http://line1-h5-pc-api.biligame.com/game/comment/page?game_base_id=101601&rank_type=3&page_num=1&page_siz'
page_length=json.loads(requests.get(url_base).text)['data']['page_count']
df_Bilibili_content=pd.DataFrame(columns={'user_name','publish_time','content','grade','user_level','up_count','reply_count'})
for page_num in range(1,page_length+1):
r=requests.get('http://line1-h5-pc-api.biligame.com/game/comment/page?game_base_id=101601&rank_type=3&page_num={}&page_siz'.format(pg_num))
datas=json.loads(r.text)['data']['list']
sys.stdout.write("\r 正在爬取页数:{0}".format(page_num))
sys.stdout.flush()
for data in datas:
username=data['user_name']
publish_time=data['publish_time']
content=data['content']
grade=data['grade']
user_level=data['user_level']
up_count=data['up_count']
reply_count=data['reply_count']
df_Bilibili_content=df_Bilibili_content.append([{'user_name':username,'publish_time':publish_time,\
'content':content,'grade':grade,'user_level':user_level,\
'up_count':up_count,'reply_count':reply_count}])
sleeps=random.uniform(1,3)
time.sleep(sleeps)
df_Bilibili_content.to_excel('B站评论爬取.xlsx')
return df_Bilibili_content
这个爬虫中,我主要爬取了用户名称,发表时间,评论内容,用户等级,点赞,回复数等。如果你需要其他的内容,可以输出返回的json串,自行查看后选择。
good luck~
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)