python爬虫

本文详细介绍了如何使用Python的selenium和BeautifulSoup库进行抖音视频爬取,包括安装必要的库、分析网页源代码、模拟登录获取视频信息、解析URL和标题,并最终请求视频并保存到本地的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python爬虫-爬抖音视频

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
案例1-爬抖音视频


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


提示:以下是本篇文章正文内容,下面案例可供参考

一、必要库安装

request
selenium
beautfulsoup4

pip install selenium
pip install beautifulsoup4
pip install request

安装selenium需要特殊注意,selenium支持Chrome、Firefox、Edge浏览器,库安装成功后还需安装相应浏览器的驱动,请确保选择与你的浏览器版本相匹配的驱动版本(版本不对应将会报错,selenium.common.exceptions.SessionNotCreatedException)。并将下载的驱动的可执行文件放在系统环境变量中,或者在代码中指定其路径。

# 指定EdgeDriver的路径  
driver_path = "path/to/msedgedriver.exe"
driver = webdriver.Edge(executable_path=driver_path)

驱动下载地址:
Chrome: ChromeDriver
Firefox: GeckoDriver
Edge: EdgeDriver (msedgedriver)
运行以下代码不报错则证明下载的版本正确并成功将驱动的路径加入到系统环境变量中。

from selenium import webdriver
browser = webdriver.Edge()
# 如果运行报错,请检查浏览器驱动是否在环境变量中
browser.get('https://www.baidu.com/')

二、分析过程

源代码分析

打开开发者工具(鼠标右键,点击检查),浏览器中输入抖音网址,在Elements菜单栏下可以看到网页源代码,按图中标注1、2步骤点击将会定位到video标签。

在这里插入图片描述
接下来研究一下source标签下src属性值,我将这个网址直接复制到浏览器进行访问,直接就返回了视频资源,这个就是我们要请求的资源了,同样的方法分析了这个视频集合下的其他视频发现有类似的结构,“?a=”前的这串代码不同,看起来就是视频ID,去掉“?a=”之后同样能获取视频资源。
在这里插入图片描述

获取视频地址以及名称

登录抖音之后,会有提示登录的页面,点击关闭之后,点击键盘上下键可以切换视频,如果观看的是某个合集,点击键盘向下键可以顺序播放,于是使用selenium模拟登录,共有两个步骤,一个是第一次访问时点击关闭登录页面,复制元素的xpath.
在这里插入图片描述
一个是按下向下键切换视频.
代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

browser = webdriver.Edge()
url = ''
browser.get(url)
# 点击登录页面关闭按钮,以xpath方式获取元素
browser.find_element(By.XPATH,'/html/body/div[4]/div/div/div/div[2]').click()

actions = ActionChains(browser)
actions.send_keys(Keys.DOWN).perform()

解析代码获取信息

在这里插入图片描述

在这里插入图片描述

soup = BeautifulSoup(browser.page_source, 'html.parser')
# 获取网址
video_info = soup.find('div', class_='O8onIiBq slider-video')
if video_info:
    sources = video_info.find_all('source')
    src_value = sources[1].get('src')
    # 截取网址中'?a='之前的部分
    targetUrl = src_value.split('?a=')[0]
# 获取标题
title_info = soup.find('div', class_='video info detail')
if title_info:
    tags_spans = title_info.find_all('span')
    # 有多个span标签
    fullTitle = [tag.text.strip() for tag in tags_spans]
    targetName = fullTitle[0].strip()

request 请求视频网址保存到本地

获取伪装请求头参数的方法
在这里插入图片描述
python 代码

# 填入cookie和userAgent
headers = {'Cookie':'',
           'User-Agent':''
}

newUrl = 'https:'+targetUrl 
newName = targetName+'.mp4'
reponses = requests.get(newUrl, headers=headers)

with open(newName, 'wb') as f:
    f.write(reponses.content)

到这下载视频基本就能实现了,代码细节再慢慢完善。


### 使用 Python 实现音视频爬虫 为了实现音视频取,可以采用两种主要方法:一种是从网页端获取数据并解析;另一种则是通过模拟移动设备请求 API 接口来获得更直接的数据源。 对于前者,在实际操作过程中会遇到反机制以及页面动态加载等问题。后者则相对稳定一些,因为官方接口通常返回结构化的 JSON 数据,易于处理。下面介绍基于第二种方式的一个简单例子: #### 准备工作 首先安装必要的库: ```bash pip install requests ``` 接着定义函数用于发送 HTTP 请求并提取视频 URL 和其他元数据信息: ```python import json import re import requests def get_video_info(share_url): headers = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 \ (KHTML, like Gecko) Chrome/87.0.4280.88 Mobile Safari/537.36' } response = requests.get(url=share_url, headers=headers) pattern = r'playAddr: "(.*?)"' result = re.findall(pattern, response.text) if not result: raise ValueError('Failed to find video address') play_addr = eval(repr(result[0]).replace('\\u002F', '/')) return {'video_url': play_addr} ``` 此部分代码负责访问分享链接对应的 HTML 页面,并从中匹配出真实的播放地址[^1]。 之后便是保存文件的部分,这里利用 `urllib` 库完成下载动作: ```python from urllib.request import urlretrieve def save_video(video_dict, file_name='douyin'): try: urlretrieve(video_dict['video_url'], f"{file_name}.mp4") print(f"Video has been saved as {file_name}.mp4 successfully.") except Exception as e: print(e) ``` 最后组合上述两步形成完整的流程控制逻辑即可调用该功能模块: ```python if __name__ == '__main__': share_link = input("Please enter the Douyin sharing link:") info = get_video_info(share_link.strip()) save_video(info) ``` 需要注意的是,随着平台策略调整和技术更新迭代,具体实现细节可能会有所变化。因此建议开发者们持续关注目标网站的技术文档和社区讨论区,以便及时作出相应修改适应新的环境需求[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值