因网站不同需要修改。

下载 mp4 连接

from bs4 import BeautifulSoup
import requests
import urllib
import re
import json
encodestyle = 'gbk'
homepage='http://www.**.html'
htmlhead='http://www.**' # GetwVideoHtml() 函数用 #GetNPage_html(homepage,n)
#HtmlList2Mp4List(sumhtml)
#Writelist2json(listname,lists) def GetwVideoHtml(furl):
retlist=[]
res = requests.get(furl)
res.encoding= encodestyle
soup = BeautifulSoup(res.text,'html.parser')
for Tag_contentpage in soup.select('.video_box'): #<div class= video_box>
for tag_a in Tag_contentpage.select('a'): #<a href = 'http-html' target='_blank'>
httphtml=tag_a['href']
retlist.append(htmlhead+httphtml) # use htmlhead
#print(imgsrc)
return retlist
def GetNPage_html(homepage,n):
rethtml=[]
for num in range(1,n+1):
if num == 1:
homewebpage=homepage
else:
homewebpage= homepage.rsplit('.',1)[0] + '_'+ str(num) + '.html'
print(homewebpage)
htmllinks = GetwVideoHtml(homewebpage)
rethtml = rethtml + htmllinks
return rethtml def GetMp4SrcFromHtml(url):
headers = ("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener)
file = urllib.request.urlopen(url).read()
file = file.decode('gbk')
pattern = re.compile(r'(https?://.*.mp4)', re.I)
videolinks = pattern.findall(file)
videolinks = list(set(videolinks))
return videolinks
def HtmlList2Mp4List(sumhtml):
retmp4s = []
for html in sumhtml:
mp4s = GetMp4SrcFromHtml(html)
for mp4 in mp4s:
retmp4s.append(mp4)
return retmp4s
def Writelist2json(listname,lists):
length = str(len(lists))
with open('D:/ipynb/commfile/'+ listname + '_len_'+length +'.json', 'w') as fw:
json.dump(lists, fw) sumhtml = GetNPage_html(homepage,3)
mp4list = HtmlList2Mp4List(sumhtml)
Writelist2json("mp4list",mp4list)

下载部分

from bs4 import BeautifulSoup
import requests
import urllib
import json
import threading
import datetime
import os def mkdir(path):
folder = os.path.exists(path)
if not folder: #判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(path) #makedirs 创建文件时如果路径不存在会创建这个路径
print ("--- new folder... ---")
print ("--- OK ---")
else:
print ("--- There is this folder! ---") def Schedule(a,b,c):
'''
回调函数:用于显示下载进度
a:已经下载的数据块
b:数据块的大小
c:远程文件的大小
'''
per = 100.0 * a * b / c
if (per > 100) :
per = 100
print ('%.2f%%' % per)
def createdownloadlink(name,url):
urllib.request.urlretrieve(url,name) class myThread (threading.Thread):
def __init__(self, name, url):
threading.Thread.__init__(self) # 线程初始化
self.name = name # 赋值成员变量
self.url = url
def run(self):
print ("开始下载:" + self.name)
urllib.request.urlretrieve(self.url,self.name)
#createdownloadlink(self.name, self.url) # 在线程中运行的函数
print ("完成下载:" + self.name)
def DownMp4file(lists):
dateASfolder=datetime.datetime.now().strftime('%m-%d')
foldername = 'D:/videos/'+dateASfolder
mkdir( foldername)
threadlist = [];#存放线程的数组,相当于线程池
filenum=0
for url in lists:
filename = foldername + '/'+ str(filenum)+ '.mp4'
filenum=filenum+1
thread = myThread(filename, url) # 创建线程对象
threadlist.append(thread) #这个线程放到线程threads
return threadlist
# 执行部分 with open('D:/ipynb/commfile/srcmp4s_len_66.json', 'r') as fr:
srcmp4s = json.load(fr) print(len(srcmp4s))
srcmp4s[0] threads= DownMp4file(srcmp4s) for t in threads[:10]:#让线程池中的所有数组开始
t.start();
for t in threads[:10]:
t.join();#等待所有线程运行完毕才执行一下的代码

python下载网页视频的更多相关文章

  1. (Python基础教程之二十二)爬虫下载网页视频(video blob)

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  2. Python下载网页的几种方法

    get和post方式总结 get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在 ...

  3. Linux 使用 you-get 指令下载网页视频

    今天无意中发现一个下载网页视频的好办法 在 Linux 系统中,可以利用 you-get 指令直接下载网页中的视频 1.更新 sudo apt-get update 2.安装 pip sudo apt ...

  4. python下载网页转化成pdf

    最近在学习一个网站补充一下cg基础.但是前几天网站突然访问不了了,同学推荐了waybackmachine这个网站,它定期的对网络上的页面进行缓存,但是好多图片刷不出来,很憋屈.于是网站恢复访问后决定把 ...

  5. python 下载bilibili视频

    说明: 1.清晰度的选择要登录,暂时还没做,目前下载的视频清晰度都是默认的480P 2.进度条仿linux的,参考了一些博客修改了下,侵删 3.其他评论,弹幕之类的相关爬虫代码放在了https://g ...

  6. python下载youtube视频

    谷歌开源了一个新的数据集,BoundingBox,(网址在这里)这个数据集是经过人工标注的视频数据集,自然想将它尽快地运用在实际之中,那么首先需要将其下载下来:可以看到网址上给出的是csv文件,该文件 ...

  7. 爬虫 | Python下载m3u8视频

    目录 从 m3u8 文件中解析出 ts 信息 按时间截取视频 抓取 ts 文件 单文件测试 批量下载 合并 ts 文件 将合并的ts文件转化为视频文件 参考资料: m3u8格式介绍 ts文件格式介绍 ...

  8. python下载网页上公开数据集

    URL很简单,数据集分散开在一个URL页面上,单个用手下载很慢,这样可以用python辅助下载: 问题:很多国外的数据集,收到网络波动的影响很大,最好可以添加一个如果失败就继续请求的逻辑,这里还没有实 ...

  9. python下载网页源码 写入文本

    import urllib.request,io,os,sysreq=urllib.request.Request("http://echophp.sinaapp.com/uncategor ...

随机推荐

  1. Xcode真机调试失败:The identity used to sign the executable is no longer valid

    在Xcode中突然好久没有使用真机调试了.今天使用真机的时候.出现例如以下的警告.并真机执行失败: The identity used to sign the executable is no lon ...

  2. Effective Java 第三版——63. 注意字符串连接的性能

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  3. NetCore指令集和

    1.查看当前目录的版本号 C:\Users\Administrator>dotnet --version 1.0.4 2.发布程式,进入到指定目录 dotnet publish 3.运行程式 # ...

  4. fiddler 对https支持

    https://www.cnblogs.com/joshua317/p/8670923.html 测试可行

  5. EPOLL AND Nonblocking I/O

    https://medium.com/@copyconstruct/nonblocking-i-o-99948ad7c957 https://idndx.com/2014/09/02/the-impl ...

  6. MySQL入门很简单-触发器

    1.触发器是由事件来触发某个操作,这些事件包括insert语句.update语句和delete语句.当数据库系统执行这些事件时,会激活触发器执行相应操作.MySQL从5.0.2开始支持触发器.使用触发 ...

  7. Delphi调用java so

    package hardware.print; public class printer { static public native int Open(); } jni导出的函数是 Java_har ...

  8. am335x ubi Read-only mode

    是因为kernel里面有一个错误,要注释一下就好.

  9. 理解、学习与使用 JAVA 中的 OPTIONAL<转>

    从 Java 8 引入的一个很有趣的特性是 Optional  类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都 ...

  10. iframe子页面与父页面元素的访问以及js变量的访问[zhuan]

    https://www.cnblogs.com/Capricorn-HCL/articles/4216302.html