今天是学习视频仿照着,爬取了B站里黑神话悟空的弹幕
所爬取弹幕的视频在这
《黑神话:悟空》最终预告 | 8月20日,重走西游_黑神话悟空
还是一样的步骤,获取网页内容——>解析网页内容
一、获取网页内容
(1)需要用到的库是 requests
pip install requests
(2)导入库
import requests
import re
(3)先写一个head,将程序伪装成网页去获取内容
这里面的网址在爬虫(一)里说过,"User-Agent":后的代码可以在任意网站中,单击右键找到“检查”——>“Network”——>刷新网页——>找到"User-Agent":后面的代码并复制
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
(4)发送网站请求
因为我们是找视频的弹幕是2024年8月里所有的,所以需要的网址要重新找一下,但也不难,不过我们先找8月里一天的(8月所有的其实也就是用个for循环,这个是后话,先不考虑),现在这个网址只是2024年8月13日的
检查——>点击该网页里的查看历史弹幕里8月13日——>点击Network里的2024-08-13
(5)找到下面这串链接,Request URL:后面的链接
response=requests.get("https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=1641689875&date=2024-08-13",headers=headers)
(6) 好了,先在看看可不可以得到网页的响应
print(response.text)#导出响应的内容
结果说,账号未登录
(7) 好吧,那我们继续来解决问题,点几(4)的链接2024-08-13——>找到cookie:——>复制框选住的所有代码
(8)添加到head里,记得加双引号(英文模式下的)
headers = {
"cookie": "buvid3=B70DFBD1-EBD2-7674-36A2-D0BB7B68BE3720095infoc; b_nut=1711276720; i-wanna-go-back=-1; b_ut=7; _uuid=59A6C10F7-8DFA-91B2-C8D9-641066D65FDFE23306infoc; enable_web_push=DISABLE; buvid4=0FB86CE5-C0B8-5977-C39D-D100B78AE44321206-024032410-WDwuYOLad0i9RqioqMjDFE1Ijib3L0qmPnSLBscFXptg8SlpSmPrIrr1v5fCeu1D; home_feed_column=4; buvid_fp=e888c679332a08cfb98435c407b972a7; rpdid=0zbfVHazx2|a3sbqHo|1kyF|3w1ROlkF; DedeUserID=455019759; DedeUserID__ckMd5=0ef615080e70ecee; header_theme_version=CLOSE; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; FEED_LIVE_VERSION=V_WATCHLATER_PIP_WINDOW3; CURRENT_QUALITY=80; browser_resolution=1280-616; PVID=1; b_lsid=B1CF7355_1916F691A11; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjQ0MTAyNDgsImlhdCI6MTcyNDE1MDk4OCwicGx0IjotMX0.I6kR34NBykWn--zEpoRisdvLvvXBtkooT6uznjpPiq4; bili_ticket_expires=1724410188; SESSDATA=6654e2b0%2C1739703049%2C92ca9%2A82CjAY2yIPvrCo1yX5PWDPo_ccHZY7M_mhuMz-w7Vm6MbygycwLpLVKrs9-FXHIxrbe5sSVjJLd2poSnFYbDl3VHE3Nm02VWRScG1YN3ljSXB0Mkt4VGhrYk5vQ0J2NVJmT3p3aTlfeEd5WmZySl9xMnJLS1ItU2JiWVhEaklXMDdqTlMxQzV0RWh3IIEC; bili_jct=ac5c693a4ed2046adc973b0cf2e02b5b; sid=4rkgr6nl",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
现在再来运行一下
response=requests.get("https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=1641689875&date=2024-08-13",headers=headers)
print(response.text)#导出响应的内容
很好,得到网页响应了
二、解析网页内容
(1)不过是乱码,但仔细看,中文都是我们需要的弹幕,ok,现在用正则化解决,一个中文正则化,怎么搞,不会?那交给在线正则表达式测试,点击左边的链接后跳出这个界面,把其中一跳乱码放进去,会出现这样的结果
但是我们要的是一句话, 而不是一列字,怎么办?也很简单,在生成的正则表达式后加上+
(2)[\u4e00-\u9fa5]+放进去,实现中文正则化
content_list = re.findall("[\u4e00-\u9fa5]+",response.text)#re.findall()函数返回包含所有匹配项的列表。返回string中所有与pattern相匹配的全部字串,返回形式为数组。
print(content_list)
结果如下,成功了一半,都是中文啦,不过不要忘了这只是其中的一天,我们需要的是2024年8月所有的
(3)生成2024年8月所有的檀木,用for循环,并且把它用txt格式导出
#for page in range(8,32):
#将它放入写好的代码
pip install requests
for page in range(8,32):
response=requests.get(f"https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=1641689875&date=2024-08-{page}",headers=headers)
content_list = re.findall("[\u4e00-\u9fa5]+",response.text)
content = "\n".join(content_list)
with open("《黑神话:悟空》_弹幕.txt",mode="a",encoding="utf-8") as f:#将得到的弹幕放入.txt格式文件里
f.write(content)
print(content_list)
结果部分展示
三、全代码(从响应到解析)
pip install requests
import requests #导入requests库
import re
headers = {
"cookie": "buvid3=B70DFBD1-EBD2-7674-36A2-D0BB7B68BE3720095infoc; b_nut=1711276720; i-wanna-go-back=-1; b_ut=7; _uuid=59A6C10F7-8DFA-91B2-C8D9-641066D65FDFE23306infoc; enable_web_push=DISABLE; buvid4=0FB86CE5-C0B8-5977-C39D-D100B78AE44321206-024032410-WDwuYOLad0i9RqioqMjDFE1Ijib3L0qmPnSLBscFXptg8SlpSmPrIrr1v5fCeu1D; home_feed_column=4; buvid_fp=e888c679332a08cfb98435c407b972a7; rpdid=0zbfVHazx2|a3sbqHo|1kyF|3w1ROlkF; DedeUserID=455019759; DedeUserID__ckMd5=0ef615080e70ecee; header_theme_version=CLOSE; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; FEED_LIVE_VERSION=V_WATCHLATER_PIP_WINDOW3; CURRENT_QUALITY=80; browser_resolution=1280-616; PVID=1; b_lsid=B1CF7355_1916F691A11; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjQ0MTAyNDgsImlhdCI6MTcyNDE1MDk4OCwicGx0IjotMX0.I6kR34NBykWn--zEpoRisdvLvvXBtkooT6uznjpPiq4; bili_ticket_expires=1724410188; SESSDATA=6654e2b0%2C1739703049%2C92ca9%2A82CjAY2yIPvrCo1yX5PWDPo_ccHZY7M_mhuMz-w7Vm6MbygycwLpLVKrs9-FXHIxrbe5sSVjJLd2poSnFYbDl3VHE3Nm02VWRScG1YN3ljSXB0Mkt4VGhrYk5vQ0J2NVJmT3p3aTlfeEd5WmZySl9xMnJLS1ItU2JiWVhEaklXMDdqTlMxQzV0RWh3IIEC; bili_jct=ac5c693a4ed2046adc973b0cf2e02b5b; sid=4rkgr6nl",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
for page in range(8,32):
response=requests.get(f"https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=1641689875&date=2024-08-{page}",headers=headers)
content_list = re.findall("[\u4e00-\u9fa5]+",response.text)
content = "\n".join(content_list)
with open("《黑神话:悟空》_弹幕.txt",mode="a",encoding="utf-8") as f:#将得到的弹幕放入.txt格式文件里
f.write(content)
print(content_list)
爬取B站视频弹幕,比起之前的豆瓣网Top250电影的标题比起来,麻烦的地方就是它的弹幕是每一天的,而且还要登录账号,还有乱码问题,但是我们都解决啦,好棒啊。为了解决这些难题我们都干了什么呢?
1.先获取2024年8月13日一天的弹幕,所以我们找到了这一天的网址链接
2.登录账号问题,找到cookie:,并复制
3.乱码问题,思考我们需要的弹幕的共性,虽然乱码一样,但是我们需要的弹幕是中文的啊,所以用中文正则化就解决啦,而且我们还收获了一个帮助我们正则化的网站在线正则表达式测试
2024年8月20日