python爬虫爬取快手视频多线程下载功能


Posted in Python onFebruary 28, 2018

环境: python 2.7 + win10

工具:fiddler postman 安卓模拟器

首先,打开fiddler,fiddler作为http/https 抓包神器,这里就不多介绍。

配置允许https

python爬虫爬取快手视频多线程下载功能 

配置允许远程连接 也就是打开http代理

python爬虫爬取快手视频多线程下载功能 

电脑ip: 192.168.1.110

然后 确保手机和电脑是在一个局域网下,可以通信。由于我这边没有安卓手机,就用了安卓模拟器代替,效果一样的。

打开手机浏览器,输入192.168.1.110:8888   也就是设置的代理地址,安装证书之后才能抓包

python爬虫爬取快手视频多线程下载功能 

安装证书之后,在 WiFi设置 修改网络 手动指定http代理

python爬虫爬取快手视频多线程下载功能 

保存后就可以了,fiddler就可以抓到app的数据了,打开快手 刷新,可以 看到有很多http请求进来,一般接口地址之类的很明显的,可以看到 是json类型的

python爬虫爬取快手视频多线程下载功能 

http post请求,返回数据是json ,展开后发现一共是20条视频信息,先确保是否正确,找一个视频链接看下。

python爬虫爬取快手视频多线程下载功能 

ok 是可以播放的 很干净也没有水印。

那么现在打开 postman 来模拟这个post 看看有没有检验参数

python爬虫爬取快手视频多线程下载功能 

一共是这么多参数,我以为 client_key 和 sign 会验证...可是 后面 发现我错了 啥也没验证 就这样提交过去就行...

form-data 方式提交则报错

python爬虫爬取快手视频多线程下载功能 

那换 raw 这种

python爬虫爬取快手视频多线程下载功能 

报错信息不一样了,试试加上 headers

python爬虫爬取快手视频多线程下载功能 

nice 成功返回数据,我又多试几次,发现每次返回结果不一样,都是 20个视频,刚才其中post参数中 有个page=1 可能一直都是第一页 就像一直在手机上不往下翻了 就开始一直刷新那样,反正 也无所谓,只要返回数据 不重复就好。

下面就开始上代码

# -*-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()

下面测试

python爬虫爬取快手视频多线程下载功能 

多线程下载 每次下载 2000 个视频左右  默认下载到D:\快手

python爬虫爬取快手视频多线程下载功能 

好了 这次就到这结束了,其实也很简单,快手竟然没有加密。。。因为 爬 抖音的时候 就碰到问题了.....

总结

以上所述是小编给大家介绍的python爬虫爬取快手视频多线程下载,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python性能优化的20条建议
Oct 25 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
Python如何抓取天猫商品详细信息及交易记录
Feb 23 Python
深入浅析Python传值与传址
Jul 10 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
Python 日志logging模块用法简单示例
Oct 18 Python
关于sys.stdout和print的区别详解
Dec 05 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
如何在pycharm中安装第三方包
Oct 27 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
python scrapy简单模拟登录的代码分析
Jul 21 Python
python爬取m3u8连接的视频
Feb 28 #Python
python实现m3u8格式转换为mp4视频格式
Feb 28 #Python
浅谈Python中的私有变量
Feb 28 #Python
python中logging包的使用总结
Feb 28 #Python
深入理解Python爬虫代理池服务
Feb 28 #Python
python实现装饰器、描述符
Feb 28 #Python
python安装教程
Feb 28 #Python
You might like
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP数组Key强制类型转换实现原理解析
2020/09/01 PHP
javascript里的条件判断
2007/02/27 Javascript
jquery之empty()与remove()区别说明
2010/09/10 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
JS跨域总结
2012/08/30 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
详解python的ORM中Pony用法
2018/02/09 Python
python实现周期方波信号频谱图
2018/07/21 Python
python实现爬山算法的思路详解
2019/04/09 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
django使用graphql的实例
2020/09/02 Python
详解python tkinter 图片插入问题
2020/09/03 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
研究生自我鉴定范文
2013/10/30 职场文书
实习教师个人的自我评价
2013/11/08 职场文书
校园自助餐厅的创业计划书
2013/12/26 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
导游词之张家界
2019/10/31 职场文书
 Python 中 logging 模块使用详情
2022/03/03 Python