ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用python养虫爬弹幕

2022-02-07 20:59:25  阅读:286  来源: 互联网

标签:python dic url html str 养虫 弹幕 contents


文章目录


前言

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

一、爬虫是什么?

百度百科这样说:自动获取网页内容的程序。在我理解看来,爬虫就是~~“在网络上爬来爬去的…”住口!~~
那么接下来就让我们看看如何养搬运B站弹幕的“虫”吧

二.饲养步骤

1. 请求弹幕

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

http://comment.bilibili.com/+cid+.xml

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

  1. 打开视频后点击F12,切换到“网络”,在筛选器处填入“cid”进行筛选。
    在这里插入图片描述
  2. 点击筛选出的网络信息,在右端Payload处找到cid
    在这里插入图片描述
  3. 到此,我们就知道了何同学视频弹幕的网络链接:

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

  1. 接着就是发送网络请求,获取网络页面资源。Python有很多发送网络请求的库。比如:
#【何同学】我用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")

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

存储弹幕

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

  • xlwt库
  • pandas库
    我们就用pandas库把
    代码如下(示例):
    把用第二步得到的字典创建dataFrame,然后用pandas库的一个API存下就行了
#用字典创建了一个电子表格
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()


总结

爬虫简单来说呢,就三步:
  1. 发送网络请求,获取资源
  2. 进行搜索等操作来获取有用信息
  3. 存储信息

学会了吗?学会的话就点个赞再走吧
在这里插入图片描述

标签:python,dic,url,html,str,养虫,弹幕,contents
来源: https://blog.csdn.net/qq_48169012/article/details/122813998

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有