批量爬取B站网络视频信息

news2024/11/25 18:51:51

使用XPath爬取B站视频链接等相关信息

    • 分析B站html框架
    • 获取内容
    • 完整代码

对于B站,目前网上的爬虫大多都是使用通过解析服务器的响应来爬取想要的内容,下面我们通过使用XPath来爬取B站上一些想要的信息

在这里插入图片描述

此次任务我们需要对B站搜索到的关键字,并爬取搜索的视频时间、播放量、弹幕量等信息

分析B站html框架

打开B站后,搜索关键字并按下F12进入开发者模式,就能看到页面的html代码,需要在这些代码中找到需要爬取的信息。
在这里插入图片描述
点击右上角的箭头图片,再点击想要爬取内容的信息,就会自动跳转到对应的html代码上。

获取内容

找到想要爬取的信息就得获取信息的XPath表达式,这儿可以通过如下图方法快速得到表达式。
在这里插入图片描述
这样就可以得到该位置的XPath表达式了。

由于第一页XPath表达式与后面页的XPath表达式有些许的不同,需要通过对链接的验证来使用不同的表达式
在这里插入图片描述

完整代码

import requests
from lxml import etree
import time
import random
import csv
import pandas as pd

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'}

result = pd.DataFrame()

urls = [
    'https://search.bilibili.com/all?vt=69174939&keyword=%E5%A4%A7%E6%95%B0%E6%8D%AE&from_source=webtop_search&spm_id_from=333.1007&search_source=2',
    'https://search.bilibili.com/all?keyword=%E7%89%A9%E8%81%94%E7%BD%91%E5%B7%A5%E7%A8%8B&from_source=webtop_search&spm_id_from=333.1007&search_source=2',
    'https://search.bilibili.com/all?vt=69174939&keyword=%E7%94%B5%E5%AD%90%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF&from_source=webtop_search&spm_id_from=333.1007&search_source=2',
    'https://search.bilibili.com/all?vt=69174939&keyword=%E8%99%9A%E6%8B%9F%E7%8E%B0%E5%AE%9E&from_source=webtop_search&spm_id_from=333.1007&search_source=2',
    'https://search.bilibili.com/all?vt=691740939&keyword=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&from_source=webtop_search&spm_id_from=333.1007&search_source=2',
]

url_key = [len(i) + 6 for i in urls]
for index, url in enumerate(urls):
    for page in range(1, 10):
        

        html = requests.get(url, headers=headers)
        print(url)
        bs = etree.HTML(html.text)
        if url[-8:-1] == 'source=':
            items = bs.xpath('//*[@id="i_cecream"]/div/div[2]/div[2]/div/div/div/div[3]/div')
        else:
            items = bs.xpath('//*[@id="i_cecream"]/div/div[2]/div[2]/div/div/div[1]')

        for i in range(1, 43):
            try:
                time = items[0].xpath(f'div[{i}]/div/div[2]/div/div/p/a/span[2]')[0].text
            except:
                time = None
            try:
                up_author = items[0].xpath(f'div[{i}]/div/div[2]/div/div/p/a/span[1]')[0].text
            except:
                up_author = None
            try:
                title = items[0].xpath(f'div[{i}]/div/div[2]/div/div/a/h3/@title')[0]
            except:
                title = None
            try:
                href = items[0].xpath(f'div[{i}]/div/div[2]/div/div/a/@href')[0]
            except:
                href = None
            try:
                Playback_volume = items[0].xpath(f'div[{i}]/div/div[2]/a/div/div[2]/div/div/span[1]/span')[0].text
            except:
                Playback_volume = None
            try:
                Barrage_volume = items[0].xpath(f'div[{i}]/div/div[2]/a/div/div[2]/div/div/span[2]/span')[0].text
            except:
                Barrage_volume = None
            try:
                Video_duration = items[0].xpath(f'div[{i}]/div/div[2]/a/div/div[2]/div/span')[0].text
            except:
                Video_duration = None
            print(time, title, up_author, href, Playback_volume, Barrage_volume, Video_duration)
            df = pd.DataFrame({'time': [time], 'title': [title], 'up_author': [up_author], 'href': [href],
                               'Playback_volume': [Playback_volume], 'Barrage_volume': [Barrage_volume],
                               'Video_duration': [Video_duration]})
            result = pd.concat([result, df])
        if url[-8:-1] == 'source=':
            url = url + '&page=2&o=36'
        else:
            new_page = int(url[url_key[index]]) + 1
            url = url[:url_key[index]] + f'{new_page}&o={(new_page - 1) * 36}'
result.to_excel("F:/B站数据.xlsx", index=False)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1903999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统安装软件包的方法rpm和yum详解

起因: 本篇文章是记录学习Centos7的历程 关于rpm 常见命令 1)查看已经安装的软件包 rpm -q 软件包名 2)查看文件的相关信息 rpm -qi 软件包名 3)查看软件包的依赖关系 就是说要想安装这个软件包,就必须把一些前…

记录一次ffmpeg手动编译出现的问题

前言部分 使用环境: ubuntu 22.04 最近手动编译了一次的ffmpeg(参考博客ffmpeg学习:ubuntu下编译ffmpeg(全网最懒的编译脚本)),但是过程出现了一些问题,因此在此记录一下,若有疑问,欢迎讨论~。 …

15集终于编译成功了-了个球!编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》

15集终于编译成功了-个球!编译TFLite Micro语音识别工程-《MCU嵌入式AI开发笔记》 还是参考这个官方文档: https://codelabs.developers.google.cn/codelabs/sparkfun-tensorflow#2 全是干货! 这里面提到的这个Micro工程已经移开了&#xff1…

Overleaf :LaTeX协作神器!【送源码】

Overleaf 是一个广受欢迎的在线 LaTeX 编辑器,专为学术写作和文档排版设计。它以其协作功能和用户友好的界面而闻名,使得 LaTeX 编辑变得更加容易和直观。 软件介绍 Overleaf 提供了一个基于云的 LaTeX 编辑环境,支持实时协作,使得…

哲讯SAP知识分享:SAP资产模块常用事务代码清单

在当今日益复杂的商业环境中,企业对于资产管理的需求日益增强。SAP作为全球领先的企业管理软件提供商,其资产模块(AM)以其高效、灵活的特性,为企业提供了全面的资产管理解决方案。本文将对SAP资产事务类型进行详细介绍…

算法的空间复杂度(C语言)

1.空间复杂度的定义 算法在临时占用储存空间大小的量度(就是完成这个算法所额外开辟的空间),空间复杂度也使用大O渐进表示法来表示 注: 函数在运行时所需要的栈空间(储存参数,局部变量,一些寄存器信息等)…

MySQL第三天作业

一、在数据库中创建一个表student,用于存储学生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); 1、向student表中添加一条新记录 记录中id字段的值为1,name字段的值为"monkey"…

STM32第十六课:WiFi模块的配置及应用

文章目录 需求一、WiFi模块概要二、配置流程1.配置通信串口,引脚和中断2.AT指令3.发送逻辑编写 三、需求实现代码总结 需求 完成WiFi模块的配置,使其最终能和服务器相互发送消息。 一、WiFi模块概要 本次使用的WiFi模块为ESP-12F模块(安信可&#xf…

字符串——string类的常用接口

一、string类对象的常见构造 二、string类对象的容量操作 三、string类对象的访问及遍历操作 四、string类对象的修改操作 一、string类对象的常见构造 1.string() ——构造空的string类对象,也就是空字符串 2.string(const char* s) ——用字符串来初始化stri…

Win10如何设置远程桌面?

远程桌面介绍 远程桌面是一款Windows提供的远程工具,旨在连接同一局域网内的两台计算机。如果您掌握被控端电脑的IP地址,便可直接连接到这台已启用远程桌面的计算机,通过远程桌面进行文件传输或提供远程技术支持。 在同一家公司内&#xff0…

JVM专题之垃圾收集器

JVM参数 3.1.1 标准参数 -version -help -server -cp 3.1.2 -X参数 非标准参数,也就是在JDK各个版本中可能会变动 ``` -Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定 3.1.3 -XX参数 > 使用得最多的参数类型 > > 非…

十一、作业

1.从大到小输出 写代码将三个整数数按从大到小输出。 void Swap(int* px, int* py) {int tmp *px;*px *py;*py tmp;} int main() {int a 0;int b 0;int c 0;scanf("%d %d %d", &a, &b, &c);int n 0;if (a<b){Swap(&a, &b);}if (a &l…

vscode配置latex环境制作beamer ppt

vscode配置latex环境制作beamer ppt 文章目录 vscode配置latex环境制作beamer ppt1. 安装Tex Live2. 安装vscode插件3. 测试Reference 写在前面&#xff0c;笔者之前一直使用overleaf来制作beamerppt&#xff0c;但是免费版本会限制编译时间上限&#xff0c;故在本地配置了late…

高级计算机体系结构--期末真题及题型总结

2024 年春季学期期末考题回顾一、名词解释二、简答题2007 年简答题2008 年简答题简答题答案 三、分析题1. MESI 和 Dragon 协议计算给定内存存取序列所需的时钟周期2007年第一题及参考答案例题及解答 2. 顺序一致性存储模型&#xff0c;判断进程的合法输出2007年第二题及参考答…

苍穹外卖 ...待更新

苍穹外卖 1、 阿里云OSS2、菜品分类查询 1、 阿里云OSS 工具类 package com.sky.utils;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import lombok.AllArgsConstructor…

【每日一练】python三目运算符的用法

""" 三目运算符与基础运算的对比 """ a 1 b 2#1.基础if运算判断写法&#xff1a; if a > b:print("基础判断输出&#xff1a;a大于b") else:print("基础判断输出&#xff1a; a不大于b")#2.三目运算法判断&#xff1a;…

【云原生】Prometheus监控Docker指标并接入Grafana

目录 一、前言 二、docker监控概述 2.1 docker常用监控指标 2.2 docker常用监控工具 三、CAdvisor概述 3.1 CAdvisor是什么 3.2 CAdvisor功能特点 3.3 CAdvisor使用场景 四、CAdvisor对接Prometheus与Grafana 4.1 环境准备 4.2 docker部署CAdvisor 4.2.2 docker部署…

flask使用定时任务flask_apscheduler(APScheduler)

Flask-APScheduler描述: Flask-APScheduler 是一个 Flask 扩展&#xff0c;增加了对 APScheduler 的支持。 APScheduler 有三个内置的调度系统可供您使用&#xff1a; Cron 式调度&#xff08;可选开始/结束时间&#xff09; 基于间隔的执行&#xff08;以偶数间隔运行作业…

洛谷 P3613 学习用map代替大大大数组的好题

题目链接&#xff1a;P3613 【深基15.例2】寄包柜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目截图&#xff1a; 题意分析&#xff1a; 非常简单的存入和取出操作 唯一的 “难点” 在于 数组开不到 a[100007][100007]&#xff0c;会暴内存 非常巧妙的引入 map 来解决…

Square Root SAM论文原理

文章目录 Square Root SAM论文原理核心原理SLAM问题的3种表示贝叶斯网络因子图&#xff08;Factor graph&#xff09;马尔科夫随机场(Markov Random Field, MRF) SLAM最小二乘问题&线性化因式分解 factorization矩阵与图(Matrices ⇔ Graphs)因式分解&变量消元(Factori…