热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python下载快手视频教程_python如何下载快手视频

#-*-coding:utf-8-*-#author:Corleoneimporturllib2,urllibimportjson,os,re,socket,time,sysimp

# -*-coding:utf-8-*-

# author : Corleone

import urllib2,urllib

import json,os,re,socket,time,sys

import Queue

import threading

import logging

# 日志模块

logger = logging.getLogger("AppName")

formatter = logging.Formatter('%(asctime)s %(levelname)-5s: %(message)s')

console_handler = logging.StreamHandler(sys.stdout)

console_handler.formatter = formatter

logger.addHandler(console_handler)

logger.setLevel(logging.INFO)

video_q = Queue.Queue()    # 视频队列

def get_video():

url ="http://101.251.217.210/rest/n/feed/hot?app=0&lon=121.372027&c=BOYA_BAIDU_PINZHUAN&sys=ANDROID_4.1.2&mod=HUAWEI(HUAWEI%20C8813Q)&did=ANDROID_e0e0ef947bbbc243&ver=5.4&net=WIFI&country_code=cn&iuid=&appver=5.4.7.5559&max_memory=128&oc=BOYA_BAIDU_PINZHUAN&ftt=&ud=0&language=zh-cn&lat=31.319303 "

data = {

'type': 7,

'page': 2,

'coldStart':'false',

'count': 20,

'pv':'false',

'id': 5,

'refreshTimes': 4,

'pcursor': 1,

'os':'android',

'client_key':'3c2cd3f3',

'sig':'22769f2f5c0045381203fc57d1b5ad9b'

}

req = urllib2.Request(url)

req.add_header("User-Agent","kwai-android")

req.add_header("Content-Type","application/x-www-form-urlencoded")

params = urllib.urlencode(data)

try:

html = urllib2.urlopen(req, params).read()

except urllib2.URLError:

logger.warning(u"网络不稳定 正在重试访问")

html = urllib2.urlopen(req, params).read()

result = json.loads(html)

reg = re.compile(u"[\u4e00-\u9fa5]+")   # 只匹配中文

for x in result['feeds']:

try:

title = x['caption'].replace("\n","")

name =" ".join(reg.findall(title))

video_q.put([name, x['photo_id'], x['main_mv_urls'][0]['url']])

except KeyError:

pass

def download(video_q):

path = u"D:\快手"

while True:

data = video_q.get()

name = data[0].replace("\n","")

id = data[1]

url = data[2]

file = os.path.join(path, name +".mp4")

logger.info(u"正在下载:%s" %name)

try:

urllib.urlretrieve(url,file)

except IOError:

file = os.path.join(path, u"神经病呀"+'%s.mp4') %id

try:

urllib.urlretrieve(url, file)

except (socket.error,urllib.ContentTooShortError):

logger.warning(u"请求被断开,休眠2秒")

time.sleep(2)

urllib.urlretrieve(url, file)

logger.info(u"下载完成:%s" % name)

video_q.task_done()

def main():

# 使用帮助

try:

threads = int(sys.argv[1])

except (IndexError, ValueError):

print u"\n用法: " + sys.argv[0] + u" [线程数:10] \n"

print u"例如:" + sys.argv[0] +" 10" + u"  爬取视频 开启10个线程 每天爬取一次 一次2000个视频左右(空格隔开)"

return False

# 判断目录

if os.path.exists(u'D:\快手') == False:

os.makedirs(u'D:\快手')

# 解析网页

logger.info(u"正在爬取网页")

for x in range(1,100):

logger.info(u"第 %s 次请求" % x)

get_video()

num = video_q.qsize()

logger.info(u"共 %s 视频" %num)

# 多线程下载

for y in range(threads):

t = threading.Thread(target=download,args=(video_q,))

t.setDaemon(True)

t.start()

video_q.join()

logger.info(u"-----------全部已经爬取完成---------------")

main()



推荐阅读
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 根据官方定义,RxJava是一种用于异步编程和可观察数据流的API。其核心特性在于流式处理能力和丰富的操作符支持。 ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • ASP.NET 进度条实现详解
    本文介绍了如何在ASP.NET中使用HTML和JavaScript创建一个动态更新的进度条,并通过Default.aspx页面进行展示。 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • JUC并发编程——线程的基本方法使用
    目录一、线程名称设置和获取二、线程的sleep()三、线程的interrupt四、join()五、yield()六、wait(),notify(),notifyAll( ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 本文探讨了如何利用RxJS库在AngularJS应用中实现对用户单击和拖动操作的精确区分,特别是在调整区域大小的场景下。 ... [详细]
  • 本文介绍了SELinux的两种主要工作模式——强制模式和宽容模式,并提供了如何在CentOS 7中正确启用和配置SELinux的方法,以及在遇到登录问题时的解决策略。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有