当前位置: 首页 > news >正文

Python 爬虫 根据ID获得UP视频信息

思路:

        用selenium库对网页进行获取,然后用bs4进行分析,拿到bv号,标题,封面,时长,播放量,发布时间

先启动webdriver.,进入网页之后,先等几秒,等加载完全了,再获取网页

options = webdriver.FirefoxOptions()

'''

无头模式启动,让selenium不用真的打开网页,节约资源同时加快速度

'''
options.add_argument('--headless')
firefox = webdriver.Firefox(options=options)

firefox.get( "https://space.bilibili.com/id/video?tid=0&pn=1keyword=&order=pubdate”)
'''

休眠

'''
time.sleep(4) 
'''

使用BeautifulSoup的html.parser进行分析

'''
html = BeautifulSoup(firefox.page_source, features="html.parser")

(id就是你要抓的up的id) 


当你拿到这些美妙的数据之后就要开始分析了,看看什么是要的,什么是不要的,首先我们先打开一个Up的主页,然后按F12,“让我们来看看,它的内构”

像这样,左边变色了,那么就代表你选中的这个块儿,是左边那个区域的
好,我们展开慢慢翻 

翻到这儿,会发现,哦,原来一页上的所有视频,都放在了一个叫li的里面,且这个liclass属性都是small-item new fakeDanmu-item 而我们需要的BV号就在li的data-aid属性里 不急往后看看,里面其他信息在那儿 

 

好好好,li里就只有一个img而这个img里的src属性和alt属性就是我们要的封面和标题 

 

在下面也能找到bv号,但是因为上面我们已经拿到了所以不用再拿了,我们拿class属性为lengthd的span里的时长class为play的span里的span的播放量,和class为time的span的发布时间 
        都找齐了,那,开整

'''

找到所有的class是mall-item fakeDanmu-item的li

''' 
videoList = html.find_all("li",attrs={"class":"small-item fakeDanmu-item"})

'''

下面就用一个li来演示怎么获得其中我们要的数据,从上到下分别说,bv号,标题,图片,时长,播放量,发布日期

'''

video = videoList[0]

#bv号

bv = video.get("data-aid")
img = video.find("img")

#标题
title = img.get("alt")

#图片
image = img.get("src")

#时长
duration = video.find("span",attrs={"class":"length"}).text

#播放量
playCount = video.find("span",attrs={"class":"play"}).find("span").text

#发布日期
date = video.find("span",attrs={"class":"time"}).text.strip()

然后发现,嘶,好像不止 一页,而且页数还和 
https://space.bilibili.com/id/video?tid=0&pn=1keyword=&order=pubdate
中的pn值有关,那好办了,找到最大有几页,然后循环获取网页,并处理就行了,现在来找找页数,有两个办法,第一,获得最多有几个视频,然后(视频数/30)向上取整数 ,就能获得页数,第二,从页面中直接获得

像这样,999+的就麻烦了,那就取获得页码吧
我们在装li的那个div下面找到了页码


然后在这里面按Ctrl+F

发现这个网页里就它class属性用的be-pager-total 

'''

因为他是把文字和数字用空格隔开,所有可用split来分割字符串,然后获得第二项,也就是我们要的页码

'''
pn = html.find('span', attrs={'class':'be-pager-total'}).

pn = pn.text.split(' ')[1] 

然后做个循环

 for pnnumber in range(pn):

        url = "https://space.bilibili.com/id/video?tid=0&pn=%skeyword=&order=pubdate"%(str(pnnumber +1))
       '''
        id那个位置记得换成你要的up的id

        然后下面循环进行获取和分析就行了

       '''

之后可以把这些数据放到json,execel,redis或者别的什么数据库中,当然,有了图片链接,你也可以去吧封面图下下来了 

相关文章:

  • Linux驱动开发(速记版)--并发与竞争
  • 【HDP】zookeeper未授权漏洞修复
  • debian 12配置固定ip
  • vuepress 浏览器加载缓存,总是显示旧页面,无法自动刷新数据的解决方法
  • JVM常见面试题
  • 足底筋膜炎的症状
  • 2024ICPC网络赛第一场C. Permutation Counting 4(线性代数)
  • 【程序员必读】近年来编程提效工具大合集。小白必看!
  • 9月26日day16
  • 望繁信科技CTO李进峰受邀在上海外国语大学开展流程挖掘专题讲座
  • Linux 如何发送带有 RequestBody 的 POST 请求
  • 影刀RPA实战:java结合影刀同步采购订单数据
  • IDEA2020运行项目时不从配置的maven仓库找jar包,从C盘默认路径下找jar包
  • C++日期类实现
  • 【Python语言初识(五)】
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 分享的文章《人生如棋》
  • 30秒的PHP代码片段(1)数组 - Array
  • Angular2开发踩坑系列-生产环境编译
  • Linux Process Manage
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Redis的resp协议
  • Spring Cloud中负载均衡器概览
  • springboot_database项目介绍
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 关于extract.autodesk.io的一些说明
  • 简单基于spring的redis配置(单机和集群模式)
  • 前端存储 - localStorage
  • 数据结构java版之冒泡排序及优化
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​力扣解法汇总946-验证栈序列
  • (1)Hilt的基本概念和使用
  • (2)STM32单片机上位机
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (三)Honghu Cloud云架构一定时调度平台
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十二)Flink Table API
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)h264中avc和flv数据的解析
  • (转)菜鸟学数据库(三)——存储过程
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net Core和.Net Standard直观理解
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net插件开发开源框架