pythonB站爬虫二(速度提升)

2023-11-01 11:20
文章标签 爬虫 提升 速度 pythonb

本文主要是介绍pythonB站爬虫二(速度提升),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果只是想获取弹幕文件呢,用之前的代码就浪费太多时间了。
所以用B站官方的api做了一点改进。(没有查到除了b站官方api之外的其他方便的下载弹幕的方法)
效果如下:


代码如下:

import requests
import json
from tqdm import tqdm
from bs4 import BeautifulSoup
from xml.dom.minidom import parseStringheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"}def get_resp_text(url):rsp = requests.get(url,headers=headers)rsp.encoding = 'utf-8'return rsp.text
def get_upname(mid):global upnamersp = requests.get('https://space.bilibili.com/'+mid)rsp.encoding = 'utf-8'html = rsp.textbss = BeautifulSoup(html, 'lxml')return (bss.find('title').text[:-len('的个人空间_哔哩哔哩_Bilibili')])
def get_bvid(mid):i = 1bvid = []while i != 0:url0 = 'https://api.bilibili.com/x/space/arc/search?mid=' + str(mid) + '&ps=30&tid=0&pn=&keyword=&order=pubdate&jsonp=jsonp'url0 = url0[:-len('&keyword=&order=pubdate&jsonp=jsonp')] + str(i) + '&keyword=&order=pubdate&jsonp=jsonp'i += 1rsp = requests.get(url0, headers=headers)rsp.encoding = 'utf-8'html = rsp.textdict = json.loads(html.replace('\n', ''))datadict = dict['data']listdict = datadict['list']vlist = listdict['vlist']if len(vlist) == 0:i = 0elif len(vlist) != 0:for _ in range(len(vlist)):bvid.insert(0, vlist[_]['bvid'])print("bv号已经爬取完毕")return bvid
def get_cid_url(bvid):cid_url = []for bid in bvid:cid_url.insert(0,'https://api.bilibili.com/x/player/pagelist?bvid=' + str(bid) + '&jsonp=jsonp')return cid_url
def get_cids(cid_urls):cids = []for cid_url in cid_urls:str = get_resp_text(cid_url)jsonstr = json.loads(str)jsrdata = jsonstr['data']jsrdict = jsrdata[0]cids.insert(0,jsrdict['cid'])return cids
def get_xml_url(cids):xml_urls = []for cid in cids:xml_urls.insert(0,'https://api.bilibili.com/x/v1/dm/list.so?oid='+str(cid))return xml_urls
def get_xmls(xml_urls):xmls = []for xml_url in xml_urls:xmls.insert(0,get_resp_text(xml_url))return xmls
def get_danmus(xmls):danmus = []for xml in xmls:tanmus = parseString(xml).documentElement.getElementsByTagName('d')for tanmu in tanmus:tanmu = tanmu.childNodes[0].datadanmus.insert(0, tanmu)print("弹幕已经爬取完毕"+'\n正在下载至本地')return danmus
def save_danmus(upname,danmus):with open(upname+".txt",'w',encoding='utf-8') as f:for danmu in  tqdm(danmus):f.write(danmu+"\n")print("共有弹幕:" + str(len(danmus)) + "条已下载至"+upname+".txt")if __name__ =='__main__':uid = input("请输入up主的uid:")upname = get_upname(uid)print("你想要查询的up主是" + upname + "吧" + "\n稍等一会儿~~")bvid = get_bvid(uid)cid_urls = get_cid_url(bvid)cids = get_cids(cid_urls)xml_urls = get_xml_url(cids)xmls = get_xmls(xml_urls)danmus = get_danmus(xmls)save_danmus(upname, danmus)

这篇关于pythonB站爬虫二(速度提升)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/322610

相关文章

Python多任务爬虫实现爬取图片和GDP数据

《Python多任务爬虫实现爬取图片和GDP数据》本文主要介绍了基于FastAPI开发Web站点的方法,包括搭建Web服务器、处理图片资源、实现多任务爬虫和数据可视化,同时,还简要介绍了Python爬... 目录一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务

MySQL 批量插入的原理和实战方法(快速提升大数据导入效率)

《MySQL批量插入的原理和实战方法(快速提升大数据导入效率)》在日常开发中,我们经常需要将大量数据批量插入到MySQL数据库中,本文将介绍批量插入的原理、实现方法,并结合Python和PyMySQ... 目录一、批量插入的优势二、mysql 表的创建示例三、python 实现批量插入1. 安装 PyMyS

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭