时隔108天,何同学在B站发布了最新的视频,《【何同学】我用108天开了个灯…》。那么就让我们用爬虫,爬取视频的弹幕,看看小伙伴们是怎么评价的吧
百度百科这样说:自动获取网页内容的程序。在我理解看来,爬虫就是~~“在网络上爬来爬去的…”住口!~~
那么接下来就让我们看看如何养搬运B站弹幕的“虫”吧
首先,得知道爬取的网站url是什么。对于B站弹幕而言,弹幕所在位置是有固定格式的:
http://comment.bilibili.com/+cid+.xml
ok,那么问题来了,cid是什么呢?不用管是什么,我告诉你怎么获取。
http://comment.bilibili.com/499893135.xml
#【何同学】我用108天开了个灯......视频的cid:499893135 #弹幕所在地 url = "http://comment.bilibili.com/499893135.xml" #发送请求 req = requests.get(url = url) #获取内容响应的内容 html_byte = req.content #将byte转为str html_str = str(html_byte,"utf-8")
还有个值得提一下的地方是,发送请求的请求头可以加上,伪装自己是浏览器访问。可以通过header参数,加上user-agent,获取方式如下:
那么,代码就是下面这样了:
#假装自己是浏览器 header ={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43' } #【何同学】我用108天开了个灯......视频的cid:499893135 #弹幕所在地 url = "http://comment.bilibili.com/499893135.xml" #发送请求 req = requests.get(url = url, headers=header) #获取内容响应的内容 html_byte = req.content #将byte转为str html_str = str(html_byte,"utf-8")
html_str是html文件的格式,我们需要对其进行处理,来获取我们想要的信息。这个时候,BeautifulSoup库就要闪亮登场了,我们用它来处理得到的html文件
代码如下(示例):
#解析 soup = BeautifulSoup(html,'html.parser') #找到html文件里的<d>标签 results = soup.find_all('d') #把标签里的文本提取出来 contents = [x.text for x in results] #存为字典 dic ={"contents" : contents}
contents就是弹幕字符串列表了,存成字典是为了下一步…
把弹幕信息存储成excel,也有好多库可以用。比如:
#用字典创建了一个电子表格 df = pd.DataFrame(dic) df["contents"].to_excel('htx.xlsx')
import requests from bs4 import BeautifulSoup import pandas as pd def main(): html = askUrl() dic =analyse(html) writeExcel(dic) def askUrl(): #假装自己是浏览器 header ={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43' } #【何同学】我用108天开了个灯......视频的cid:499893135 #弹幕所在地 url = "http://comment.bilibili.com/499893135.xml" req = requests.get(url = url, headers=header) html_byte = req.content#字节 html_str = str(html_byte,"utf-8") return html_str def analyse(html): soup = BeautifulSoup(html,'html.parser') results = soup.find_all('d') #x.text表示要放到contents中的值 contents = [x.text for x in results] #保存结果 dic ={"contents" : contents} return dic def writeExcel(dic): #用字典创建了一个电子表格 df = pd.DataFrame(dic) df["contents"].to_excel('htx.xlsx') if __name__ == '__main__': main()
学会了吗?学会的话就点个赞再走吧