Python已看python_爬虫Python爬虫案例分享

【Python爬虫】如何把抖音漂亮的小姐姐(高清、无水印)保存到

2021-10-23  本文已影响0人  Python案例教学

前言

现在自媒体平台上经常有一些视频素材需要保存下来,但是大部分平台下载下来都带上了平台水印,影响视频美观。这次我们用爬虫,可以爬到高清无水印的视频

本文知识点

1、selenium模块的使用
2、requests模块的使用
3、re正则表达式的使用

环境介绍

模块使用

内容

本次目标:爬取漂亮小姐姐视频内容

分析网页

F12或者鼠标右键点击检查 >>>选择network 下面 media 过滤音频和视频数据包

找到播放地址 (指定的当前视频的播放地址),视频播放地址, 是可以在视频详情页网页源代码里面可以获取

代码实现步骤:

  1. 发送请求, 对于视频详情页发送请求 https://www.douyin.com/video/7012228758782397699
  2. 获取数据, 获取网页源代码数据内容
  3. 解析数据, 提取视频播放地址 以及 视频标题
  4. 保存数据, 把小姐姐视频保存到本地

爬取一个视频内容

导入模块

import requests  # 数据请求模块 pip install requests
import re  # 正则表达式模块 内置模块 不需要安装

发送请求

url = 'https://www.douyin.com/video/6975418738799676680'
# headers 伪装 把python代码进行伪装 让服务器识别不出我是脚本
headers = {
    'cookie': 'douyin.com; ttcid=de99440b8a5c4d16affc993730f4983310; ttwid=1%7CwyS5KyrVGXLuX5nmoYq1CJi6RjbegNYEf85fr4LcrRM%7C1632744377%7C0ae37032dafd0b7394ba6c35f7d78fc3bcfc17bf3465ee87b6ffb23c9bd1d9aa; 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)

获取数据

print(response.text)

解析数据

提取视频播放地址,以及视频标题

title = re.findall('<title data-react-helmet="true"> (.*?)</title>', response.text)[0]
href = re.findall('src(.*?)vr%3D%2', response.text)[1]
video_url = requests.utils.unquote(href).replace('":"', 'https:') # 解码

保存数据

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)

运行代码,得到数据

批量获取数据数据

导入模块

from selenium import webdriver  # pip install selenium 模拟人的行为操作浏览器
import time

实例化一个浏览器对象

driver = webdriver.Chrome()  # 实例化一个浏览器对象
driver.get('https://www.douyin.com/user/MS4wLjABAAAAK1Zd96kIeExggUquf_wrHUPDQYTZfjdGXClxQAJHyMQ')
time.sleep(3)  # 延时3秒钟 手动打码
drop_down()

提取标签

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)

执行页面滚动的操作

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)

替换特殊字符

title = re.sub(r'[\/:*?"<>|]', '_', title)

运行代码

上一篇下一篇

猜你喜欢

热点阅读