当前位置:
首页 > temp > python入门教程 >
-
Python批量下载抖音高清无水印小视频
开发环境:
Python 3.6
Pycharm
浏览器驱动 >>> 和浏览器(谷歌或者火狐) 版本最相近的一个(下载驱动之后和你代码放到同一个文件里面就可以使用)
模块使用:
- requests >>> pip install requests
- selenium >>> pip install selenium
- re
- os
想要学习Python的可以点这里,每晚8点都有免费Python案例的讲解,还有老师在线一对一的解答
本篇文章流程(爬虫基本思路):
一. 数据来源分析
-
确定需求 (我们要爬的内容是什么?)
抖音视频内容 -
通过开发者工具进行抓包分析
I. (F12/鼠标右键点击检查可以打开) 选择network 选择 media 找播放地址
II. 找播放地址来源 >>>
二. 代码实现过程
-
发送请求 对于视频详情页发送请求
-
获取数据 获取网页源代码数据
-
解析数据 提取视频播放地址 以及视频标题
-
下载保存
爬取一个视频
安装所需模块
import requests # 数据请求 第三方模块 pip install requests import re # 正则表达式模块 import os # 文件操作模块 import time # 时间模块 from selenium import webdriver # pip install selenium
发送请求
url = 'https://www.douyin.com/video/6942071509448002846' # headers 请求头 伪装作用 # user-agent: 浏览器的基本信息 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' } response = requests.get(url=li_url, headers=headers)
解析数据 通过 re 正则表达式
# 正则表达式匹配出来的内容是列表 # 贪婪模式[我全都要] 非贪婪模式(?) title = re.findall('<title data-react-helmet="true"> (.*?)</title>', response.text, re.S) new_title = change_title(title) # 返回是列表 是没问题的吧 [1] 索引取值 第一个元素索引位置是0 第二个元素索引位置 1 html_data = re.findall('src(.*?)vr%3D%2', response.text)
进行解码
video_url = requests.utils.unquote(html_data)
保存数据
with open(filename + new_title + '.mp4', mode='w') as f: f.write(video_content) # 写入内容 print(title)
创建文件夹
filename = 'video\\' # 文件名字 if not os.path.exists(filename): # 判断如果没有这个文件夹的话 os.mkdir(filename) # 创建这个文件
批量爬取
实例化一个浏览器的对象
driver = webdriver.Chrome() # 访问url地址网址 driver.get('https://www.douyin.com/user/MS4wLjABAAAAY8bNCoKh6fT_I2ZRaCkVB4pcVPIeoC0a9jOWWPUKvJw') # 延时三秒 time.sleep(3) # 下滑操作 drop_down()
模拟滑动操作
def drop_down(): """执行页面滚动的操作""" # javascript for x in range(1, 30, 4): # 在你不断的下拉过程中, 页面高度也会变的 time.sleep(1) j = x / 9 # document.documentElement.scrollTop 指定滚动条的位置 # document.documentElement.scrollHeight 获取浏览器页面的最大高度 js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j driver.execute_script(js)
返回的列表 里面元素是对象
lis = driver.find_elements_by_css_selector('div._927ae3b0dd790b5b62eae61c7d2fa0bc-scss > div:nth-child(2) > ul li') for li in lis: # 调用 find_element_by_css_selector() 方法 li_url = li.find_element_by_css_selector('a').get_attribute('href') driver.quit()
替换特殊字符
def change_title(title): pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|\n]") # '/ \ : * ? " < > |' new_title = re.sub(pattern, "_", title) # 替换为下划线 return new_title
运行结果
出处:https://www.cnblogs.com/qshhl/p/15206713.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数