学习前提

1、了解python基础语法
2、了解re、selenium、BeautifulSoup、os、requests等python第三方库

1.引入库

爬取网站视频需要引入的第三方库:

import os
from selenium import webdriver
import requests
from bs4 import BeautifulSoup
import re
12345

模块用处:

1、os模块:文件目录操作模块,用于创建或者删除目录或文件。
2、selenium模块:python请求模块之一,用于某些特殊请求。
3、requests模块:用于请求网页地址。
4、BeautifulSoup模块:用于解析网页,获取页面元素或内容。
5、re模块:正则表达式,本程序中用于匹配视频链接。


2.请求网页地址

请求页面:

"""请求页面"""
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
} #请求
url = "http://www.kakadm.com/anime/2417/" #网页地址,这里以卡卡动漫中的无限斯特拉托斯为例
r = requests.get(url, headers=header)
html = r.text #以二进制打印页面
1234567

由上述代码获取如下页面:

请求头(反爬机制中的一种):

headers中包含网页请求中的请求头,每一个浏览器都有属于自己的请求头,因此需要更改,以免请求失败


3.解析网页,获取播放链接

解析上述页面:

"""解析页面"""
soup = BeautifulSoup(html, "html.parser")
urls = soup.find("div", class_="movurl").find_all("a") #查找视频播放链接videourls = []
for u in urls:videourls.append(u.get("href")) #由分析网页元素可知,仅获取链接部分内容# 获取视频播放地址
str = "http://www.kakadm.com/"
for index, item in enumerate(videourls):videourls[index] = str + item #加上前缀,获取13个视频播放链接
123456789101112

由上述代码获取如下页面:


4.解析网页,获取视频源链接,即获取后缀名含.mp4的链接

由上述代码获取视频播放页面后,获取源视频链接:

# 请求获取视频源mp4
videos = []
title = []
chrome_options = webdriver.ChromeOptions()
# 使用headless无界面浏览器模式,即不需要打开浏览器
chrome_options.add_argument('--headless')  # 增加无界面选项
chrome_options.add_argument('--disable-gpu')  # 如果不加这个选项,有时定位会出现问题
flag = 0
name = ''
for u in videourls:# 启动浏览器,获取网页源代码b = webdriver.Chrome(options=chrome_options)  # 建立Chrome的驱动b.implicitly_wait(10)  # 隐式等待,动态查找元素b.get(u)  # 在Chrome上打开网址# 获取视频名字,如:无限斯特拉托斯if flag == 0:soup = BeautifulSoup(html, "html.parser")name = soup.find("title").string.split('-')[0]  # 获取标签内的内容flag = 1# 进入iframe内嵌网页b.switch_to.frame("playbox")  # 针对iframe标签,(id)html = b.page_source  # 打印页面soup = BeautifulSoup(html, "html.parser")t = soup.find("title").string.split(' ')[0]  # 视频命名v = re.findall(r'(http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+\.mp4)',html)  # 获取mp4网址t = name + " " + ttitle.append(t)videos.append(v)print(v)b.quit()  # 退出
12345678910111213141516171819202122232425262728293031323334

由上述代码获取如下视频源链接:

注意:
在本例子中,卡卡动漫里的视频源链接放在ifame标签中,这是基本反爬机制之一。ifame标签会隐藏其内的内容,用requests模块不能直接访问,需要在浏览器中访问,即需要selenium模块,通过针对iframe标签的方法b.switch_to.frame(id)
打开浏览器来访问iframe标签,并获取隐藏其中的视频源链接。

5.下载视频,并储存到指定文件夹

由上述代码获取视频源链接后,下载到指定文件目录:

"""下载mp4视频"""
i = 0  # 显示当前下载第几个视频
j = 0  # 遍历视频标题列表
# 创建视频文件目录
path = 'D:\Softdownload\Python\\videos\{}\\'.format(name)
if os.path.exists(path) == False:  # 如果文件不存在os.mkdir(path)
for index, item in enumerate(videos):i += 1print("正在下载第{}个视频".format(i))file_name = title[j] + '.mp4'  # 命名成mp4格式j += 1r = requests.get(videos[index][0], headers=header)  # 请求里面的网址with open(path + file_name, 'wb') as f:  # 在指定文件夹下载视频,没有就创建f.write(r.content)
123456789101112131415

由上述代码会建立如下文件目录:

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

Python网络爬虫——爬取视频网站源视频!相关推荐

  1. Python:网络爬虫爬取某表情包网站

    Python:网络爬虫爬取某表情包网站 参考: 爬虫基础知识点汇总(html文件基础和4个常用库 超级详细长文预警) [爬虫教程]吐血整理,最详细的爬虫入门教程~ HTML的简单介绍 HTML的全称为 ...

  2. Python网络爬虫爬取虎扑步行街爆照区话题

    Python网络爬虫爬取虎扑步行街爆照区话题 作者:郜科科 最近的任务挺多的,但是心情很烦躁,想做一些自己喜欢的东西,前些时候感觉Python爬虫很好玩,就自学了一下.本人比较喜欢逛街--虎扑步行街, ...

  3. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  4. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  5. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...

    原标题:如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下) 前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往 ...

  6. 用python网络爬虫爬取英雄联盟英雄图片

    用python爬虫爬取lol皮肤. 这也用python网络爬虫爬取lol英雄皮肤,忘了是看哪个大神的博客(由于当时学了下就一直放在这儿,现在又才拿出来,再加上马上要考二级挺忙的.),代码基本上是没改, ...

  7. 使用python网络爬虫爬取新浪新闻(一)

    使用python网络爬虫爬取新浪新闻 第一次写博客,感觉有点不太习惯!不知道怎么突然就想学学爬虫了,然后就用了一天的时间,跟着教程写了这个爬虫,!不说废话了,我将我从教程上学习的东西整个写下来吧,从头 ...

  8. python如何爬虫网页数据-python网络爬虫爬取网页内容

    1.什么是网络爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自 ...

  9. python网络爬虫——爬取嗅事百科

    网络爬虫 - 爬取嗅事百科 爬取过程分三大步: 一,请求,获取网页源码 url为:url =' https : //www.qiushibaike.com/8hr/page/'+ str(page)先 ...

  10. 如何用Python网络爬虫爬取网易云音乐歌词

    前几天小编给大家分享了数据可视化分析,在文尾提及了网易云音乐歌词爬取,今天小编给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下: 找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌 ...

最新文章

  1. 微信小程序下拉刷新和上拉加载
  2. CentOS7下搭建LAMP+FreeRadius+Daloradius Web管理
  3. Mybatis中的attempted to return null from a method with a primitive return type (int).异常
  4. Java语言之数组_java语言之数组-----选择排序
  5. 在程序员面前千万不要说这9句话,我一个同事就死的很惨!
  6. git push 和 pull 时 免密执行的方法
  7. Axure中将不同文件页面合在同一个页面中
  8. 通过图像的指针读取图像
  9. One by One [ 1 x 1 ] Convolution - counter-intuitively useful
  10. c语言如何输出结构体数组,怎么才能把结构体里面的二维数组打印出来?
  11. Cterm里面自动发帖的Python脚本
  12. 3ds Max中Vray分布式渲染
  13. Parse error: syntax error, unexpected ':', 解决办法
  14. Maye v1.3.4.0 类似Rolan简洁小巧易用的快速启动工具
  15. burnintest激活_PassMark BurnInTest Pro v9.0.1006(拷机软件)真正注册版
  16. 对于线性代数、特征空间、特征提取、深度学习的一些深夜思考
  17. 《长尾理论》读书笔记------”长尾法则--怎样创造一个消费天堂“
  18. 戴尔390计算机电源问题,DELL笔记本电脑电源适配器无电压输出故障
  19. fdtd simulation, plotting with gnuplot, writting in perl
  20. $.ajax({});的各个参数的理解

热门文章

  1. 计算机进pe按键,台式机进入pe按什么键
  2. HTML网页实训的目的,网页设计实习目的及意义
  3. 考研408院校合集以及学科评估
  4. Java电阻计算器(二)
  5. JS设计模式-单例模式
  6. 高通CSR8615蓝牙音频模块单芯片介绍
  7. spider.php使用方法,phpspider爬虫框架怎么用
  8. 基于Bootstrap 3可预览的HTML5文件上传插件
  9. linux 流程图软件有哪些,除了visio,流程图软件还有哪些?
  10. 基于Python的QQ空间相册中的所有照片下载器