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

相关文章

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

Golang 网络爬虫框架gocolly/colly(五)

gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goquery就显得捉襟见肘了。解决方法有很多种: 一,最笨拙但有效的方法是字符串处理,go语言string底层对应字节数组,复制任何长度的字符串的开销都很低廉,搜索性能比较高; 二,利用正则表达式,要提取的数据往往有明显的特征,所以正则表达式写起来比较简单,不必非常严谨; 三,使

Golang网络爬虫框架gocolly/colly(四)

爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟。回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫,那时由于项目需要,要访问各大国际社交网站,Facebook,myspace,filcker,youtube等等,国际上叫得上名字的社交网站都爬过,大部分网站提供restful api,有些功能没有api,就只能用http抓包工具分析协议,自己爬;国内的优酷、

Golang网络爬虫框架gocolly/colly(三)

熟悉了《Golang 网络爬虫框架gocolly/colly 一》和《Golang 网络爬虫框架gocolly/colly 二》之后就可以在网络上爬取大部分数据了。本文接下来将爬取中证指数有限公司提供的行业市盈率。(http://www.csindex.com.cn/zh-CN/downloads/industry-price-earnings-ratio) 定义数据结构体: type Zhj

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那