废话不多说,直接上代码

from selenium import webdriver
from selenium.webdriver import ChromeOptions
import time
import re
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import uuid
import os
import requests option = ChromeOptions()
option.add_argument(
'user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36"'
)
option.add_experimental_option('excludeSwitches', ['enable-automation']) #防止系统检测到自动化工具
option.add_experimental_option('useAutomationExtension', False)
browser = webdriver.Chrome(options=option)
browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
}) browser.maximize_window()#页面最大化 def douyincrawler(keyword):
url = 'https://www.douyin.com/search/'+keyword+'?publish_time=0&sort_type=0&source=switch_tab&type=video'
browser.get(url)
browser.find_element_by_xpath('//*[@id="qdblhsHs"]/button').click() #点击登陆用抖音手机app扫码登陆
time.sleep(15) #设置等待时间扫码登陆 for x in range(5):#自动下拉
time.sleep(5)
js_bottom = "var q=document.documentElement.scrollTop=10000"
browser.execute_script(js_bottom)
if '服务出现异常' in browser.page_source: #刷新页面
browser.refresh()
if '服务异常,重新' in browser.page_source:
browser.find_element_by_xpath('//*[@id="dark"]/div[2]/div/div[3]/div[2]/div/div/span').click() #点击加载 detail_url_lists = browser.find_elements_by_xpath('//*[@id="dark"]/div[2]/div/div[3]/div[2]/ul/li/div/div/a[1]')# 获取页面所有详情url
print('共计侦查到{}个视频数据'.format(len(detail_url_lists)))
for i in detail_url_lists:
try:
browser.execute_script("arguments[0].click();", i) #防止页面有该元素却无法点击问题出现
ws = browser.window_handles #获取所有窗口
browser.switch_to.window(ws[1]) #切换新句柄
WebDriverWait(browser, 10).until(EC.presence_of_element_located((
By.XPATH, '//*[@id="root"]/div/div[2]/div/div/div[1]/div[1]/div[2]/div/div[1]/div/div[2]/div[2]/xg-video-container/video'
))) #显示等待视频标签出现
video_url = 'https:' + re.findall(r'<source class="" src="(.*?)"', browser.page_source)[0] # 正则获取视频链接
savevideo(video_url)
browser.close() #关闭当前窗口
browser.switch_to.window(ws[0]) #切回主页面这一步很关键
except Exception as e:
print(e) def savevideo(video_url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36",
}
video_dir = r'C:\Users\lvye\Desktop\dou_yin\video'
video_full_path = os.path.join(video_dir,str(uuid.uuid4()) + '.mp4')
response = requests.get(url=video_url,headers=headers)
with open(video_full_path,'wb')as f:
f.write(response.content)
print('已下载:{}'.format(video_url)) if __name__ == '__main__':
douyincrawler('街拍美女')

成果展示:

抖音网页版高清视频抓取教程selenium的更多相关文章

  1. HTML5与CSS3基础教程(第7版) 高清PDF扫描版​

    HTML5与CSS3基础教程(第7版)试读不仅介绍了文本.图像.链接.列表.表格.表单.多媒体等网页元素,也介绍了如何为网页设计结构.布局,添加动态效果.格式化等形式,此外还涉及调试和发布.聚合和吸引 ...

  2. PHP和MySQL Web开发(原书第4版) 高清PDF+源代码

    PHP和MySQL Web开发(原书第4版) 高清PDF+源代码 [日期:2014-08-06] 来源:Linux社区  作者:Linux [字体:大 中 小]     内容简介 <PHP和My ...

  3. 使用Flutter开发的抖音国际版

    简介 最近花了两天时间研究使用Flutter开发一个抖音国际版. 先上图,个人感觉使用Flutter开发app快得不要不要的额.  两天就基本可以开发个大概出来.   最主要是热更新,太方便实时调整U ...

  4. 第二篇-用Flutter手撸一个抖音国内版,看看有多炫

    前言 继上一篇使用Flutter开发的抖音国际版 后再次撸一个国内版抖音,大部分功能已完成,主要是Flutter开发APP速度很爽,  先看下图 项目主要结构介绍 这次主要的改动在api.dart 及 ...

  5. Docker技术入门与实战第2版-高清文字版

      Docker技术入门与实战第2版-高清文字版 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取 ...

  6. 杀戮天使(Angels of Death)无删减版 高清下载

      Created by Marydon on 已完结 免责声明 本人所提供的资源搜集于网络,仅供学习交流使用,不得进行任何商业及非法用途,由此产生的一切后果将由使用者本人承担: 本人仅仅提供一个观摩 ...

  7. 抖音C#版,自己抓第三方抖音网站

    感谢http://dy.lujianqiang.com技术支持 文章更新:http://dy.lujianqiang.com这个服务器已经关了,现在没用了 版权归抖音公司所有,该博客只是为交流学习所使 ...

  8. 第三篇-用Flutter手撸一个抖音国内版,看看有多炫

    前言 前一篇已经开发了大部分框架,包含视频上下滑动播放,这次将上次未完成的数据显示友好显示,以及底部音乐走马灯特效,另外优化了加载数据的bug,在dart语言里 & 会自动变成&  另 ...

  9. 第四篇-用Flutter手撸一个抖音国内版,看看有多炫

    前言 这次对布局进行优化,主要包含了首页tabview pageview 以及添加几个按钮的操作过程.主要使用到stack层叠布局,tabpview和pageview,tabview两个页面,一个关注 ...

随机推荐

  1. 基于双TMS320C6678 DSP的3U VPX的信号处理平台

    一.板卡概述 板卡由我公司自主研发,基于3U VPX架构,处理板包含两片TI DSP TMS320C6678芯片:一片Xilinx公司的Spartan XC3S200AN 配置芯片: DSP之间通过 ...

  2. Note -「多项式」基础模板(FFT/NTT/多模 NTT)光速入门

      进阶篇戳这里. 目录 何为「多项式」 基本概念 系数表示法 & 点值表示法 傅里叶(Fourier)变换 概述 前置知识 - 复数 单位根 快速傅里叶正变换(FFT) 快速傅里叶逆变换(I ...

  3. v80.01 鸿蒙内核源码分析(内核态锁篇) | 如何实现快锁Futex(下) | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(内核态锁篇) | 如何实现快锁Futex(下) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) ...

  4. python进阶(25)协程

    协程的定义 协程(Coroutine),又称微线程,纤程.(协程是一种用户态的轻量级线程) 作用:在执行 A 函数的时候,可以随时中断,去执行 B 函数,然后中断B函数,继续执行 A 函数 (可以自动 ...

  5. OpenGL ES 3D空间中自定义显示空间

    在Android中,我们所熟知的是在ES管线中,其在图元装配时,会进行图元组装与图元分配,这样就回剪裁出来视景体中的物体.但是如果我想在3D场景中规定一个区域,凡是在这个区域中的物体就能显示出来,非这 ...

  6. monowall

    https://www.cat-home.org/?action=show&id=158

  7. 新建一个scrapy项目

    此次是做一个豆瓣的top250信息的抓取 首先打开pycharm 在pycharm的下端的Terminal中输入scrapy startproject douban 此时系统就生成了以下文件(spid ...

  8. Linux:査看文件的详细信息

    Linux中stat是査看文件详细信息的命令. 1.命令格式: stat [选项] 文件名/目录名 2.选项: -f:査看文件所在文件系统信息,而不是査看文件信息. 3. 案例 案例1:査看文件的详细 ...

  9. MySQL 8.0.25 MSI Install 安装过程

    官网下载地址: https://dev.mysql.com/downloads/mysql   其中web-community需要联网安装,另外一个可以离线安装.我下载的是离线安装包.   1.双击安 ...

  10. 二叉树的N中遍历方式和拓展应用

    (一)创建二叉树,如下图所示,一个标准的二叉树是所有位于根节点的左侧的子节点都是比根节点小的,右侧则都是大于根节点的. public class BinaryNode { public int val ...