开发者

你会使用python爬虫抓取弹幕吗

开发者 https://www.devze.com 2022-12-10 10:09 出处:网络 作者: 璨星烁
目录前言一、爬虫是什么?二、饲养步骤1.请求弹幕2.解析弹幕3.存储弹幕4.总代码三、总结前言
目录
  • 前言
  • 一、爬虫是什么?
  • 二、饲养步骤
    • 1.请求弹幕
    • 2.解析弹幕
    • 3.存储弹幕
    • 4.总代码
  • 三、总结

    前言

    时隔108天,何同学在B站发布了最新的视频,《【何同学】我用108天开了个灯…》。那么就让我们用爬虫,爬取视频的弹幕,看看小伙伴们是怎么评价的吧

    一、爬虫是什么?

    百度百科这样说:自动获取网页内容的程序。在我理解看来,爬虫就是~~“在网络上爬来爬去的…”住口!~~

    那么接下来就让我们看看如何养搬运B站弹幕的“虫”吧

    二、饲养步骤

    1.请求弹幕

    首先,得知道爬取的网站url是什么。对于B站弹幕而言,弹幕所在位置是有固定格式的:

    http://comme编程客栈nhttp://www.cppcns.comt.bilibili.com/+cid+.xml

    ok,那么问题来了,cid是什么呢?不用管是什么,我告诉你怎么获取。

    1.打开视频后点击F12,切换到“网络”,在筛选器处填入“cid”进行筛选。

    你会使用python爬虫抓取弹幕吗

    2.点击筛选出的网络信息,在右端Payload处找到cid

    你会使用python爬虫抓取弹幕吗

    3.到此,我们就知道了何同学视频弹幕的网络链接:

    http://comment.bilibili.com/499893135.xml

    4.接着就是发送网络请求,获取网络页面资源。python有很多发送网络请求的库。比如:

    • urllib库
    • requests库

    我们用reaquests库演示

    发送请求的代码如下

    (示例):

    #【何同学】我用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,获取方式如下:

    你会使用python爬虫抓取弹幕吗

    那么,代码就是下面这样了:

    #假装自己是浏览器
    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")
    

    2.解析弹幕

    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就是弹幕字符串列表了,存成字典是为了下一步…

    3.存储弹幕

    把弹幕信息存储成excel,也有好多库可以用。比如:

    • xlwt库
    • pandas库

    我们就用pandas库把

    代码如下(示例):

    把用第二步得到的字典创建dataFrame,然后用pandas库的一个API存下就行了

    #用字典创建了一个电子表格
    df = pd.DataFrame(dic)
    df["contents"].to_excel('htx.xlsx')
    

    4.总代码

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
     def main():
        html = askUrl()
        dic =analyse(html)
        writeExcel(dic)
     def askU编程客栈rl():
        #假装自己是浏览器
        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
        #弹幕所在地
        ur编程客栈l = "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()
     

    三、总结

    爬虫简单来说呢,就三步:

    1.发送网络请求,获取资源

    2.进行搜索等操作来获取有用信息

    3.存储信息

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号