前言
现在自媒体平台上经常有一些视频素材需要保存下来,但是大部分平台下载下来都带上了平台水印,影响视频美观。这次我们用爬虫,可以爬到高清无水印的视频
本文知识点
1、selenium模块的使用 2、requests模块的使用 3、re正则表达式的使用
有疑问的同学,或者想要Python相关资料的可以加群:1039649593 找管理员领取资料和一对一解答
环境介绍
- python 3.8
- pycharm 2021专业版 >>> 激活码
- 谷歌浏览器/火狐浏览器
- 谷歌驱动/火狐驱动
模块使用
- requests >>> pip install requests
- selenium >>> pip install selenium
- re
- time
内容
本次目标:爬取漂亮小姐姐视频内容
分析网页
F12或者鼠标右键点击检查 >>>选择network 下面 media 过滤音频和视频数据包
找到播放地址 (指定的当前视频的播放地址),视频播放地址, 是可以在视频详情页网页源代码里面可以获取
代码实现步骤:
- 发送请求, 对于视频详情页发送请求 https://www.douyin.com/video/7012228758782397699
- 获取数据, 获取网页源代码数据内容
- 解析数据, 提取视频播放地址 以及 视频标题
- 保存数据, 把小姐姐视频保存到本地
爬取一个视频内容
导入模块
代码语言:javascript复制import requests # 数据请求模块 pip install requests
import re # 正则表达式模块 内置模块 不需要安装
发送请求
代码语言:javascript复制url = 'https://www.douyin.com/video/6975418738799676680'
# headers 伪装 把python代码进行伪装 让服务器识别不出我是脚本
headers = {
'cookie': 'douyin.com; ttcid=de99440b8a5c4d16affc993730f4983310; ttwid=1|wyS5KyrVGXLuX5nmoYq1CJi6RjbegNYEf85fr4LcrRM|1632744377|0ae37032dafd0b7394ba6c35f7d78fc3bcfc17bf3465ee87b6ffb23c9bd1d9aa; MONITOR_WEB_ID=aa02b1ce-7eca-4ca1-9945-26f6eb8736c4; passport_csrf_token_default=41c044ddb9a7768743f59ef8c445836b; passport_csrf_token=41c044ddb9a7768743f59ef8c445836b; odin_tt=59541282299fd6088773d60702c10e22cf395bbe2ad43387cc5a1f1268e0b49539d2228b027e13642805eaa6c46804e338df3a16d9da9c7178a2a202f7489d12; _tea_utm_cache_6383=undefined; douyin.com; s_v_web_id=verify_kuqvv6p4_YjqU18Ra_QeV7_4zv8_9ZB9_WBVgaVOs06uj; _tea_utm_cache_1300=undefined; __ac_nonce=061681c2f000567586575; __ac_signature=_02B4Z6wo00f01-i76fwAAIDCi7EplXNNuu.on-1AAJtQNYXvhFUOGADQjDBpv-bfFdUV4sLQv1NC67tc-k1IspofGeBvDhfKKqeZNZCOa.hxwhj-AHQQIVnquzZ7vtGjx2HSsG3GQLOgMse720; msToken=6sG90ahzLoVg7R4O5SAh_qe9OXTGEHiSZ4997ef5wn5ep5Jkg1NMJ0O73wMh-xJS3rYRUuk7Z6LBkKolkMEg63exfDDl-gsStfY6HfqBlmaaLfTTX6aDzd8dZvs=; msToken=htFRUeGN-Xof_NiqwMK2xx1UuA3wqQuzgbdl7KoH_hS2T730pt6bw7vz0RzU3BCuGiSq-YQF61qyvnSJY3CZqcUgAuLgBNWiD1vY3KIKZnMmGLoG1W3jMA==; tt_scid=9F5FY0k84EFeUv8G-wjVOB2.pGkWm9KQRvFIte.XLiJNaUyk1vHm5HoJgiDNYpzx9f71',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
获取数据
代码语言:javascript复制print(response.text)
解析数据
提取视频播放地址,以及视频标题
代码语言:javascript复制title = re.findall('<title data-react-helmet="true"> (.*?)</title>', response.text)[0]
href = re.findall('src(.*?)vr=%2', response.text)[1]
video_url = requests.utils.unquote(href).replace('":"', 'https:') # 解码
保存数据
代码语言:javascript复制video_content = requests.get(url=video_url).content # 获取二进制数据内容
with open('video\' title '.mp4', mode='wb') as f:
f.write(video_content)
print(title, video_url)
运行代码,得到数据
批量获取数据数据
导入模块
代码语言:javascript复制from selenium import webdriver # pip install selenium 模拟人的行为操作浏览器
import time
实例化一个浏览器对象
代码语言:javascript复制driver = webdriver.Chrome() # 实例化一个浏览器对象
driver.get('https://www.douyin.com/user/MS4wLjABAAAAK1Zd96kIeExggUquf_wrHUPDQYTZfjdGXClxQAJHyMQ')
time.sleep(3) # 延时3秒钟 手动打码
drop_down()
提取标签
代码语言:javascript复制lis = driver.find_elements_by_css_selector('#root > div.windows-os > div:nth-child(2) > div > div._67f6d320f692f9e5f19d66f4c8a1ecf9-scss > div._927ae3b0dd790b5b62eae61c7d2fa0bc-scss > div:nth-child(2) > ul > li')
for li in lis:
url = li.find_element_by_css_selector('a').get_attribute('href')
print(url)
执行页面滚动的操作
代码语言:javascript复制def drop_down():
for x in range(1, 30, 4): # 1 3 5 7 9 在你不断的下拉过程中, 页面高度也会变的
time.sleep(1)
j = x / 9 # 1/9 3/9 5/9 9/9
# document.documentElement.scrollTop 指定滚动条的位置
# document.documentElement.scrollHeight 获取浏览器页面的最大高度
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
driver.execute_script(js)
替换特殊字符
代码语言:javascript复制title = re.sub(r'[/:*?"<>|]', '_', title)