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)
到这下载视频基本就能实现了,代码细节再慢慢完善。