教程:抓取工具 网页flash视频
优采云 发布时间: 2022-09-23 02:11教程:抓取工具 网页flash视频
一、经验
1、年末月末的一个漆黑风大的夜晚,在网上花重金买了某某的培训课程。一开始平台没有给用户限制时间,突然有一天,网页上显示剩下的100天,然后突然慌了,时间,时间,时间。. . .
2、 接下来,我开始思考如何捕捉视频。我在网上看了很多视频爬虫。有简单的和困难的。这对我来说很难。它正在改变,但它现在很稳定。
3、视频中使用的pcf文件加密传输,然后又一顿饭找资料,好吧,放弃~没办法
4、最后,心血来潮,用桌面视频录制工具,将想要的视频一一录制下来(说不定以后会躺在硬盘上吃灰……)。后来发现这个数字太大了,很耗时间。你有精力盯着电脑看。非常感谢~~~~~~
5、有一天,我一时兴起,用代码记录了屏幕。我想自己实现代码,但我放弃了更多的东西;然后我考虑使用代码来控制桌面屏幕录制工具;好的,完美
6、 代码,代码~~~~~~~~
7、录完就放毒~~~~~~~~~
结束,代码已经发布
二、作曲1、工具
a、selenium + chrome 用于模拟用户
湾。Scrapy简单粗暴
d。EV录屏工具
2、关键点
一个。Scrapy 依次模拟浏览器播放
b、码控ev录音
三码
这里主要是为了控制ev录制工具(爬虫代码上传了会被举报,毕竟签了协议之后个人还是不能做群的工作),这个文档主要提供一些思路:一些无法捕获的视频,您可以使用屏幕录制。(温馨提示:如果视频有带个人信息的水印,为避免不必要的纠纷,不建议在线上传)
前提条件:运行代码前,打开ev录屏工具,调整录屏桌面大小和音源
ev 开始录制
# 切换Windows窗口,查找EV录屏软件 ;开始录制 (3秒准备延时)
Window.find_window_wildcard(".*EV.*")
Window.set_foreground()
# ctrl + F1 开始
win32api.keybd_event(17, 0, 0, 0) # Control
win32api.keybd_event(112, 0, 0, 0) # F1
win32api.keybd_event(112, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
# 点击 目录上的视频
ActionChains(driver).move_to_element(video).perform()
sleep(1)
ActionChains(driver).move_to_element(video).click().perform()
sleep(2)
# 播放视频
video_play = driver.find_element_by_class_name('xdyplayer')
ActionChains(driver).move_to_element(video_play).click().perform()
Window.find_window_wildcard(".*TTS.*")
Window.set_foreground()
win32api.keybd_event(32, 0, 0, 0) # space
win32api.keybd_event(32, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
ev 完成录音
# ctrl + F2 结束
win32api.keybd_event(17, 0, 0, 0) # Control
win32api.keybd_event(113, 0, 0, 0) # F2
win32api.keybd_event(113, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
完整代码
再三考虑后,一起发布,以保证项目的完整性。(有心有账号码的可以用,但是爬虫一般是时间敏感的,以后不要用了,此码仅供学习参考)
allowed_domains = ['http://www.xxxx.cn/'] # 屏蔽了网站
driver.get('http://www.xxxx.cn/') # 打开网页,屏蔽了网站
driver.find_element_by_id("js_account_pm").send_keys("xxxxxxxxx@qq.com") # 屏蔽了个人账户
sleep(1)
driver.find_element_by_id("js_password").send_keys("xxxxxxxx") # 屏蔽了账户密码
代码显示如下
# -*- coding: utf-8 -*-
import json
import os
from time import sleep
import scrapy
import win32api
import win32con
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from tarena.control import WindowMgr, key_input
days_enumerate = ["day1", "day2", "day3", "day4", "day5", "day6", "day7", "day8"]
class LoadSpider(scrapy.Spider):
name = 'load'
allowed_domains = ['http://www.xxxx.cn/']
start_urls = ['http://www.baidu.com']
def parse(self, response):
if os.path.exists("video_info.text"):
with open("video_info.text", "r") as f:
data = f.readlines()
if len(data) > 0:
file_info = json.loads(data[0])
else:
file_info = {}
else:
file_info = {}
<p>
Window = WindowMgr()
chrome_options = webdriver.ChromeOptions()
path_dir = r'E:\workspace\crawler\hilqiqi0\chrome\User Data'
chrome_options.add_argument('--user-data-dir=' + path_dir) # 设置成用户自己的数据目录
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('http://www.xxxx.cn/') # 打开网页
try:
target = driver.find_elements_by_xpath('//a[@οnclick="checkTtsUser()"]')[1]
ActionChains(driver).move_to_element(target).perform()
sleep(2)
ActionChains(driver).move_to_element(target).click().perform()
# 校验跳转
sleep(5)
driver.find_element_by_class_name('tree-box-x').find_elements_by_xpath('./div')[2:4] #[4:5] # [1:5]
except:
# 登陆
driver.find_element_by_id("login_xxw").click()
sleep(1)
driver.find_element_by_id("js_account_pm").clear()
sleep(1)
driver.find_element_by_id("js_password").clear()
sleep(1)
driver.find_element_by_id("js_account_pm").send_keys("xxxxxxxxx@qq.com")
sleep(1)
driver.find_element_by_id("js_password").send_keys("xxxxxxxx")
sleep(1)
driver.find_element_by_id("js_submit_login").click()
# 等待登陆成功
sleep(5)
target = driver.find_elements_by_xpath('//a[@οnclick="checkTtsUser()"]')[1]
ActionChains(driver).move_to_element(target).perform()
sleep(2)
ActionChains(driver).move_to_element(target).click().perform()
# 等待加载网页
sleep(5)
home_handler = driver.current_window_handle
# 大类:
# 第二阶段
# 第三阶段
# 第四阶段
# 完成
majors = driver.find_element_by_class_name('tree-box-x').find_elements_by_xpath('./div')[2:4] #[4:5] # [1:5]
for major in majors:
major_text = major.find_element_by_xpath('./div').text
print(major_text)
# 第一阶段 LINUX, PYTHON01, PYTHON02, PYTHON03, OOP,
# 第二阶段 MYSQL, PYTHONTHREAD, PYTHONNET, MONGODB, PROJECT01,
# 第三阶段 WEBBASIC01, WEBBASIC02, PYTHONWEB01, PYTHONWEB02, PYTHONWEB03,
# 第四阶段 CRAWLER01, CRAWLER02, DATASCIENCE, AI01, AI02, PROJECT02,
# 完成
courses = major.find_elements_by_xpath('./ul')
for course in courses:
course_text = course.text
print(course_text)
course_target = course.find_element_by_class_name('course-name-x')
ActionChains(driver).move_to_element(course_target).perform()
sleep(2)
ActionChains(driver).move_to_element(course_target).click().perform()
# 视频目录
days = driver.find_elements_by_class_name('clearfix')
day_index = 0
for day in days:
try:
day_target = day.find_element_by_class_name('day-class')
except:
continue
day_text = day_target.text
if day_text == "":
continue
# 点击进入播放页面
print(day_text)
day_enumerate = days_enumerate[day_index]
day_index += 1
day_target = day_target.find_element_by_xpath('./a')
ActionChains(driver).move_to_element(day_target).perform()
sleep(2)
ActionChains(driver).move_to_element(day_target).click().perform()
# 网页切换
all_handler = driver.window_handles
for handler in all_handler:
if handler != home_handler:
driver.switch_to.window(handler)
# 手动加载flash,谷歌需要点击一次
while True:
try:
while driver.find_element_by_xpath('//a[@href="http://www.adobe.com/go/getflash"]').text == "这里":
sleep(1)
except:
sleep(10)
break
# 视频页
videos = driver.find_element_by_class_name('video-list').find_elements_by_xpath('./p/a')
video_index = 0
for video in videos:
video_text = video.text
print(video_text)
video_index += 1
file_name = course_text + "_" + day_enumerate + "_" + str(video_index)
file_value = course_text + "_" + day_text + "_" + video_text
print(file_value)
if file_name in file_info:
continue
# 切换Windows窗口,查找EV录屏软件 ;开始录制 (3秒准备延时)
Window.find_window_wildcard(".*EV.*")
Window.set_foreground()
# ctrl + F1 开始
win32api.keybd_event(17, 0, 0, 0) # Control
win32api.keybd_event(112, 0, 0, 0) # F1
win32api.keybd_event(112, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
# 点击 目录上的视频
ActionChains(driver).move_to_element(video).perform()
sleep(1)
ActionChains(driver).move_to_element(video).click().perform()
sleep(2)
# 播放视频
video_play = driver.find_element_by_class_name('xdyplayer')
ActionChains(driver).move_to_element(video_play).click().perform()
Window.find_window_wildcard(".*TTS.*")
Window.set_foreground()
win32api.keybd_event(32, 0, 0, 0) # space
win32api.keybd_event(32, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
while True:
try:
if driver.find_element_by_class_name('tit').text == "重播":
# ctrl + F2 结束
win32api.keybd_event(17, 0, 0, 0) # Control
win32api.keybd_event(113, 0, 0, 0) # F2
win32api.keybd_event(113, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
sleep(1)
print(file_name)
key_input(file_name)
file_info[file_name] = file_value
with open("video_info.text", "w") as f:
f.writelines(json.dumps(file_info))
break
except Exception as e:
print(e)
sleep(2)
pass
#
# break
sleep(2)
driver.close()
# sleep(2)
driver.switch_to.window(home_handler)
# 向上拖拽
driver.execute_script("arguments[0].scrollIntoView();", day_target)
# break
# 去除选择
ActionChains(driver).move_to_element(course_target).perform()
sleep(2)
ActionChains(driver).move_to_element(course_target).click().perform()
# 向上拖拽
driver.execute_script("arguments[0].scrollIntoView();", course_target)
# break
# break
driver.quit() # 关闭Chrome浏览器,如果不写这句话浏览器就会停留在百度首页在后台运行不会关闭浏览器
</p>
干货教程:【Python爬虫】批量抓取网页上的视频
Python爬虫批量抓取网页上的视频 Python爬虫批量抓取网页上的视频原创November 30, 2014 010813 标签 python爬虫 1 为什么学python编程语言 本科已经用了好几年了 因为*敏*感*词*CC的方向和机器学习有关,最近大部分时间都在研究机器学习。 《机器学习实战》这本书里的例子都是用python写的,目前支持更多机器学习算法的语言是当然pythonmatlaboctave也很适合机器学习,但毕竟是学术工具,而且它绝对不如工业开发中的python或pythonc。总之,你应该熟悉机器学习python和NumPy库,所以这两天决定学习python,发现了一个评估LEC评估方法下载评估量规免费下载LEC评估方法下载大学评估表文档下载大学评估表文档下载 不错的公开课 看了两天,边看代码边打字 感觉python确实是一门很简单的语言,只要有一点CCJava或者其他语言,一两天就可以上手python了。当然,入门容易,精通难。你还需要多练习。下面这个简单的爬虫程序是看完视频写的。这是第一个小程序。所以顺便说一下,我用这个爬虫来抓取网页上的视频网址。右键查看源码,发现提供下载的视频格式都是mp4后缀。网页上提供下载的视频都在源代码中。要匹配的正则表达式是rr"hrefhttpmp4" 接下来的任务是获取网页的源代码然后在源代码中找到所有匹配正则r的字符串来抓取源代码。可以使用 urllib 中的 urlopen 方法 pageurlliburlopenurl 返回一个页面 页面的对象页面可以通过 htmlpageread 保存到 html 变量中。抓取源代码后,需要找到并获取其中的所有href。您可以通过常规 r 和常规模块 re 中的 findall 方法来获取它。 mp4Listrefindallre_mp4htmlfindall 返回列表 list 元素是视频的地址。例如,下面是一个视频地址。抓取后,使用模块urllib中的urlretrieve方法通过视频地址下载视频。 urlliburlretrievemp4urlmp4url 是 mp4List 中的一个元素。另外,您可以将下载的视频命名为urlliburlretrievemp4url "smp4" filename 这个文件名是一个变量,当一个视频被下载时它会加1,这样所有的视频都被命名为1mp42mp43mp4,以便于查看下载路径可以在urllibretrievemp4"smp4"filename后面加一句printfile"smp4"donefilename这样下载完一个视频后就会输出一行提示运行效果如下代码如下python26[python]viewplaincopyprintusrbinpythonimportreimporturllibdefgetHtmlurlpageurlliburlopenurlhtmlpagereadreturnhtmldefgetMp4htmlrr"hrefhttpmp4"re_mp4recompilermp4Listrefindallre_mp4htmlfilename1formp4urlinmp4Listurlliburlretrievemp4url "smp4"filenameprintfile"smp4"donefilenamefilename1urlraw_input"pleaseinputthesourceurl"htmlgetHtmlurlgetMp4htmlCopyright StatementThis article is for the blogger 原创文章未经博主许可请勿转载