您的位置:首页 > 汽车 > 新车 > 批量爬取B站网络视频信息

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

2024/10/6 20:59:50 来源:https://blog.csdn.net/qq_44936246/article/details/139727687  浏览:    关键词:批量爬取B站网络视频信息

使用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 pdheaders = {'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].textexcept:time = Nonetry:up_author = items[0].xpath(f'div[{i}]/div/div[2]/div/div/p/a/span[1]')[0].textexcept:up_author = Nonetry:title = items[0].xpath(f'div[{i}]/div/div[2]/div/div/a/h3/@title')[0]except:title = Nonetry:href = items[0].xpath(f'div[{i}]/div/div[2]/div/div/a/@href')[0]except:href = Nonetry:Playback_volume = items[0].xpath(f'div[{i}]/div/div[2]/a/div/div[2]/div/div/span[1]/span')[0].textexcept:Playback_volume = Nonetry:Barrage_volume = items[0].xpath(f'div[{i}]/div/div[2]/a/div/div[2]/div/div/span[2]/span')[0].textexcept:Barrage_volume = Nonetry:Video_duration = items[0].xpath(f'div[{i}]/div/div[2]/a/div/div[2]/div/span')[0].textexcept:Video_duration = Noneprint(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]]) + 1url = url[:url_key[index]] + f'{new_page}&o={(new_page - 1) * 36}'
result.to_excel("F:/B站数据.xlsx", index=False)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com