20231202_python练习_b站视频爬取(selenium浏览器模拟登录版)

本文主要是介绍20231202_python练习_b站视频爬取(selenium浏览器模拟登录版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先手工登录一次获取cookies,然后进行数据保存

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
import json# 创建Chrome浏览器对象
chrome_opt = webdriver.ChromeOptions()
# 开启无界面模式
#chrome_opt.add_argument('--headless')
# 禁用gpu
chrome_opt.add_argument('--disable-gpu')
service = Service('D:/网页数据爬取/selenium练习/chromedriver.exe')
# 创建Chrome浏览器实例
browser = webdriver.Chrome(service=service,options=chrome_opt)#记得写完整的url 包括http和https
browser.get('https://space.bilibili.com/')# 等待页面加载完成
browser.implicitly_wait(10)
#程序打开网页后20秒内手动登陆账户
time.sleep(10)browser.find_element(By.CSS_SELECTOR,'input[type="text"]').send_keys('用户名')
browser.find_element(By.CSS_SELECTOR,'input[type="password"]').send_keys('密码')
#程序打开网页后30秒内手动登陆账户
time.sleep(30)with open('cookies.txt','w') as cookief:#将cookies保存为json格式cookief.write(json.dumps(browser.get_cookies()))
browser.close()

然后使用现有cookies登录用户,进行网页访问,获取清晰视频

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from pprint import pprint
import time
import json
import re
import requests
from moviepy.editor import *# 创建Chrome浏览器对象
chrome_opt = webdriver.ChromeOptions()
# 开启无界面模式
chrome_opt.add_argument('--headless')
# 禁用gpu
chrome_opt.add_argument('--disable-gpu')
service = Service('D:/网页数据爬取/selenium练习/chromedriver.exe')
# 创建Chrome浏览器实例
browser = webdriver.Chrome(service=service,options=chrome_opt)#记得写完整的url 包括http和https
browser.get('https://space.bilibili.com/')
#首先清除由于浏览器打开已有的cookies
browser.delete_all_cookies()with open('cookies.txt','r') as cookief:#使用json读取cookies 注意读取的是文件 所以用load而不是loadscookieslist = json.load(cookief)# 方法1 将expiry类型变为intfor cookie in cookieslist:#并不是所有cookie都含有expiry 所以要用dict的get方法来获取if isinstance(cookie.get('expiry'), float):cookie['expiry'] = int(cookie['expiry'])browser.add_cookie(cookie)#记得写完整的url 包括http和https
browser.get('https://space.bilibili.com/')
#程序打开网页后20秒内手动登陆账户
time.sleep(3)for i in range(96):num = i+1url ='https://www.bilibili.com/video/BV1k94y1J7oJ?p=' + str(num)browser.get(url)# 等待页面加载完成browser.implicitly_wait(10)#网页内容#print(browser.page_source)html_text = browser.page_sourceobj = re.compile(r'<title data-vue-meta="true">(.*?)</title>', re.S)html_biaoti = obj.findall(html_text)[0]  # 从列表转换为字符串biaoti = str(html_biaoti).replace('、', '_').replace(',', '_').replace('/', '').replace(' ', '_').replace('|','').replace('_哔哩哔哩_bilibili', '')# print('html_biaoti:',biaoti)# baseUrl视频地址obj = re.compile(r'window.__playinfo__=(.*?)</script>', re.S)html_data = obj.findall(html_text)[0]  # 从列表转换为字符串# print(html_data)json_data = json.loads(html_data)# 格式化输出,JSON文件美观化#pprint(json_data)# video和audio分别时视频与音频videos = json_data['data']['dash']['video']video_url = videos[0]['baseUrl']audios = json_data['data']['dash']['audio']audio_url = audios[0]['baseUrl']print('video_url', video_url)print('audio_url', audio_url)video_url_m4s = re.compile(r'-\d-\d(.*?).m4s', re.S)video_url_m4s = video_url_m4s.findall(video_url)[0]video_url_m4s = int(video_url_m4s)print('video_url_m4s', video_url_m4s)# cookies做拼接cookies_list = [item["name"] + "=" + item["value"] for item in browser.get_cookies()]cookies = ';'.join(it for it in cookies_list)print(cookies)# 得到cookies后,即可使用requests来做接口爬虫headers = {'Cookie': f'{cookies}',"Referer": "https://space.bilibili.com/86219219/favlist?spm_id_from=333.788.0.0",'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.51 Safari/537.36'}#判断视频清晰度if video_url_m4s >= 64:resp1 = requests.get(url=video_url, headers=headers)with open(biaoti + '.mp4', mode='wb') as f:f.write(resp1.content)resp2 = requests.get(url=audio_url, headers=headers)with open(biaoti + '.mp3', mode='wb') as f:f.write(resp2.content)# 视频音频文件组合video_path = biaoti + '.mp4'audio_path = biaoti + '.mp3'# 提取音轨audio = AudioFileClip(audio_path)# 读入视频video = VideoFileClip(video_path)# 将音轨合并到视频中video = video.set_audio(audio)# 输出video.write_videofile(f"{biaoti}(含音频).mp4")time.sleep(1)# 将涉及MP3MP4清除try:os.remove(video_path)except:passtry:os.remove(audio_path)except:passprint(num, biaoti, '爬取完成')#breaktime.sleep(60)

这篇关于20231202_python练习_b站视频爬取(selenium浏览器模拟登录版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

python 3.8 的anaconda下载方法

《python3.8的anaconda下载方法》本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介... 目录python3.8 版本的 Anaconda 下载与安装指南一、Anaconda 简介二、下载 An

Python自动化处理手机验证码

《Python自动化处理手机验证码》手机验证码是一种常见的身份验证手段,广泛应用于用户注册、登录、交易确认等场景,下面我们来看看如何使用Python自动化处理手机验证码吧... 目录一、获取手机验证码1.1 通过短信接收验证码1.2 使用第三方短信接收服务1.3 使用ADB读取手机短信1.4 通过API获取

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

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

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

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

Python重命名文件并移动到对应文件夹

《Python重命名文件并移动到对应文件夹》在日常的文件管理和处理过程中,我们可能会遇到需要将文件整理到不同文件夹中的需求,下面我们就来看看如何使用Python实现重命名文件并移动到对应文件夹吧... 目录检查并删除空文件夹1. 基本需求2. 实现代码解析3. 代码解释4. 代码执行结果5. 总结方法补充在