爬虫(2)

今天是学习视频仿照着,爬取了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

5c665ee8ae6c42978cb885c62a25c015.png

(5)找到下面这串链接,Request URL:后面的链接

963f78b8567b41e9aef581af4f8285fd.png

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)#导出响应的内容

结果说,账号未登录

286fe8f1c29d44e4b40edfbe0aeff2b9.png

(7) 好吧,那我们继续来解决问题,点几(4)的链接2024-08-13——>找到cookie:——>复制框选住的所有代码9b5292150af046759730216539017c7a.png

 (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)#导出响应的内容

很好,得到网页响应了

1603a55cb21b4961a69a6871c9ccbfb0.png

二、解析网页内容 

(1)不过是乱码,但仔细看,中文都是我们需要的弹幕,ok,现在用正则化解决,一个中文正则化,怎么搞,不会?那交给在线正则表达式测试,点击左边的链接后跳出这个界面,把其中一跳乱码放进去,会出现这样的结果

3459c9be88274ab8a66408f2c0c0f330.png

但是我们要的是一句话, 而不是一列字,怎么办?也很简单,在生成的正则表达式后加上+

d06ffcb42ab34d22b47cc792d21050c0.png

 (2)[\u4e00-\u9fa5]+放进去,实现中文正则化

 

content_list = re.findall("[\u4e00-\u9fa5]+",response.text)#re.findall()函数返回包含所有匹配项的列表。返回string中所有与pattern相匹配的全部字串,返回形式为数组。
print(content_list)

 结果如下,成功了一半,都是中文啦,不过不要忘了这只是其中的一天,我们需要的是2024年8月所有的dad5f7561bfe4dfbb960e915b1720391.png

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

 结果部分展示

d324b7740e27424c9189338bc3b3d5ac.png

 

三、全代码(从响应到解析)

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日

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值