Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Python爬虫】“曹芬~~嘿嘿”是什么梗?批量下载快手平台视频数据

【Python爬虫】“曹芬~~嘿嘿”是什么梗?批量下载快手平台视频数据

作者头像
松鼠爱吃饼干
发布于 2021-10-14 08:51:37
发布于 2021-10-14 08:51:37
85200
代码可运行
举报
文章被收录于专栏:Python分享Python分享
运行总次数:0
代码可运行

知识点

  • requests
  • json
  • re
  • pprint

开发环境:

  • 版 本:anaconda5.2.0(python3.6.5)
  • 编辑器:pycharm

案例实现步骤:

一. 数据来源分析 (只有当你找到数据来源的时候, 才能通过代码实现)

  1. 确定需求 (要爬取的内容是什么?) 爬取某个关键词对应的视频 保存mp4
  2. 通过开发者工具进行抓包分析 分析数据从哪里来的(找出真正的数据来源)? 静态加载页面 笔趣阁为例 动态加载页面 开发者工具抓数据包

二. 代码实现过程

  1. 找到目标网址
  2. 发送请求 get post
  3. 解析数据 (获取视频地址 视频标题)
  4. 发送请求 请求每个视频地址
  5. 保存视频

今天的目标

三. 单个视频

导入所需模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import json
import requests
import re

发送请求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = {
    'operationName': "visionSearchPhoto",
    'query': "query visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n  visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n    result\n    llsid\n    webPageArea\n    feeds {\n      type\n      author {\n        id\n        name\n        following\n        headerUrl\n        headerUrls {\n          cdn\n          url\n          __typename\n        }\n        __typename\n      }\n      tags {\n        type\n        name\n        __typename\n      }\n      photo {\n        id\n        duration\n        caption\n        likeCount\n        realLikeCount\n        coverUrl\n        photoUrl\n        liked\n        timestamp\n        expTag\n        coverUrls {\n          cdn\n          url\n          __typename\n        }\n        photoUrls {\n          cdn\n          url\n          __typename\n        }\n        animatedCoverUrl\n        stereoType\n        videoRatio\n        __typename\n      }\n      canAddComment\n      currentPcursor\n      llsid\n      status\n      __typename\n    }\n    searchSessionId\n    pcursor\n    aladdinBanner {\n      imgUrl\n      link\n      __typename\n    }\n    __typename\n  }\n}\n",
    'variables': {
        'keyword': '张三',
        'pcursor': ' ',
        'page': "search",
        'searchSessionId': "MTRfMjcwOTMyMTQ2XzE2Mjk5ODcyODQ2NTJf5oWi5pGHXzQzMQ"
    }

response = requests.post('https://www.kuaishou.com/graphql', data=data)

加请求头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
headers = {
    # Content-Type(内容类型)的格式有四种(对应data):分别是
    # 爬虫基础/xml: 把xml作为一个文件来传输
    # multipart/form-data: 用于文件上传
    'content-type': 'application/json',
    # 用户身份标识
    'Cookie': 'kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; did=web_721a784b472981d650bcb8bbc5e9c9c2',
    # 浏览器信息 (伪装成浏览器发送请求)
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}

json序列化操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# json数据交换格式,JSON出现之前, 大家一直用XML来传递数据
# 由于各个语言都支持 JSONJSON 又支持各种数据类型,所以JSON常用于我们日常的 HTTP 交互、数据存储等。
# 将python对象编码成Json字符串
data = json.dumps(data)
json_data = requests.post('https://www.kuaishou.com/graphql', headers=headers, data=data).json()

字典取值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
feeds = json_data['data']['visionSearchPhoto']['feeds']
for feed in feeds:
    caption = feed['photo']['caption']
    photoUrl = feed['photo']['photoUrl']
    new_title = re.sub(r'[/\:*?<>/\n] ', '-', caption)

再次发送请求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
resp = requests.get(photoUrl).content

保存数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open('video\\' + title + '.mp4', mode='wb') as f:
    f.write(resp)
print(title, '爬取成功!!!')

四. 翻页爬取

导入模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import concurrent.futures
import time

发送请求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制


def get_json(url, data):
    response = requests.post(url, headers=headers, data=data).json()
    return response

修改标题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def change_title(title):
    # windows系统文件命名 不能含有特殊字符...
    # windows文件命名 字符串不能超过 256...
    new_title = re.sub(r'[/\\|:?<>"*\n]', '_', title)
    if len(new_title) > 50:
        new_title = new_title[:10]
    return new_title

数据提取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def parse(json_data):
    data_list = json_data['data']['visionSearchPhoto']['feeds']
    info_list = []
    for data in data_list:
        # 提取标题
        title = data['photo']['caption']
        new_title = change_title(title)
        url_1 = data['photo']['photoUrl']
        info_list.append([new_title, url_1])
    return info_list

保存数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def save(title, url_1):
    resp = requests.get(url_1).content
    with open('video\\' + title + '.mp4', mode='wb') as f:
        f.write(resp)
    print(title, '爬取成功!!!')

主函数 调动所有的函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def run(url, data):
    """主函数 调动所有的函数"""
    json_data = get_json(url, data)
    info_list = parse(json_data)
    for title, url_1 in info_list:
        save(title, url_1)

if __name__ == '__main__':
    start_time = time.time()
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        for page in range(1, 5):
            url = 'https://www.kuaishou.com/graphql'
            data = {
                'operationName': "visionSearchPhoto",
                'query': "query visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n  visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n    result\n    llsid\n    webPageArea\n    feeds {\n      type\n      author {\n        id\n        name\n        following\n        headerUrl\n        headerUrls {\n          cdn\n          url\n          __typename\n        }\n        __typename\n      }\n      tags {\n        type\n        name\n        __typename\n      }\n      photo {\n        id\n        duration\n        caption\n        likeCount\n        realLikeCount\n        coverUrl\n        photoUrl\n        liked\n        timestamp\n        expTag\n        coverUrls {\n          cdn\n          url\n          __typename\n        }\n        photoUrls {\n          cdn\n          url\n          __typename\n        }\n        animatedCoverUrl\n        stereoType\n        videoRatio\n        __typename\n      }\n      canAddComment\n      currentPcursor\n      llsid\n      status\n      __typename\n    }\n    searchSessionId\n    pcursor\n    aladdinBanner {\n      imgUrl\n      link\n      __typename\n    }\n    __typename\n  }\n}\n",
                'variables': {
                    'keyword': '曹芬',
                    # 'keyword': keyword,
                    'pcursor': str(page),
                    'page': "search",
                    'searchSessionId': "MTRfMjcwOTMyMTQ2XzE2Mjk5ODcyODQ2NTJf5oWi5pGHXzQzMQ"
                }
            }
            data = json.dumps(data)
            executor.submit(run, url, data, )
    print('一共花费了:', time.time()-start_time)

耗时为57.7秒

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 松鼠爱吃饼干 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python采集西瓜视频数据,1080P无水印视频版
知识点 动态数据抓包 动态页面分析 requests携带参数发送请求 json数据解析 开发环境 python 3.8 更加新 稳定 运行代码 pycharm 2021.2 辅助敲代码 requests 第三方模块 一. 数据来源分析(思路分析) 1. 打开一个作者视频页面 2. 打开开发者工具刷新网页 右键点击检查 或者 F12 打开 选择network 然后刷新网页 随便点击打开一个视频 点击搜到的内容 依次展开查看, 去找到我们需要的视频地址 4. 确定url地址, 请求方式, 请
松鼠爱吃饼干
2022/01/24
2.4K0
Python采集西瓜视频数据,1080P无水印视频版
Requests库(十四)一文揭秘如何获取快手关注的视频
Requests库(十三)利用钉钉机器人打造一个钉钉群定时推送今日头条24小时热闻
雷子
2021/03/15
8300
Requests库(十四)一文揭秘如何获取快手关注的视频
爬虫案例
一、壁纸网站 # coding=utf-8 """ 作者:gaojs 功能: 新增功能: 日期:2022/3/25 19:35 """ import os.path import requests import parsel def get_address(): """ 获取url地址 :return: """ dirname = 'photo/' if not os.path.exists(dirname):
懿曲折扇情
2022/08/24
1.1K0
搞定短视频!批量下载快手视频(附源码)
相信大家都接触了短视频平台,比如某音、某手等平台,竟然大家都熟悉了,那么今天辰哥分享的技术是:在某手上搜索视频,并实现下载!
Python研究者
2021/07/26
2.4K0
Python 批量爬取猫咪图片实现千图成像
本文使用的 Python 版本是 3.10.0 版本,可直接在官网下载:https://www.python.org 。
Lucifer三思而后行
2021/11/03
9920
Python 批量爬取猫咪图片实现千图成像
Python爬虫——Python 岗位分
前两篇我们分别爬取了糗事百科和妹子图网站,学习了 Requests, Beautiful Soup 的基本使用。不过前两篇都是从静态 HTML 页面中来筛选出我们需要的信息。这一篇我们来学习下如何来获取 Ajax 请求返回的结果。
py3study
2020/01/19
5720
Python爬虫——Python 岗位分
源代码和工具 | 2023 bilibili 视频评论爬虫,单条视频最多可爬取 10000 条评论
我帮一些没玩过 b 站的朋友问了 ChatGPT,b 站是什么,它是这么回答我的。
月小水长
2023/08/17
3.3K5
源代码和工具 | 2023 bilibili 视频评论爬虫,单条视频最多可爬取 10000 条评论
Python爬虫:爬取某q音乐歌曲
“相信大家都很喜欢听音乐,在各种音乐平台上,今天为大家介绍一个利用Python爬取某Q付费音乐的案列,欢迎大家一起学习,一起交流,共同进步!”
@莜莜
2021/06/24
1.4K0
python爬虫教程:批量抓取 QQ 群信息
本文讲解Python批量抓取 QQ 群信息,包括群名称、群号、群人数、群主、地域、分类、标签、群简介等内容,返回 XLS / CSV / JSON 结果文件。
python学习教程
2019/08/06
5.6K3
没想到上面好看的跳舞小姐姐蛮多的,【Python爬虫】采集微博视频数据
随时随地发现新鲜事!微博带你欣赏世界上每一个精彩瞬间,了解每一个幕后故事。分享你想表达的,让全世界都能听到你的心声!今天我们通过python去采集微博当中好看的视频!
松鼠爱吃饼干
2021/12/04
3640
没想到上面好看的跳舞小姐姐蛮多的,【Python爬虫】采集微博视频数据
Python爬虫实战案例:取喜马拉雅音频数据详解
喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢?
松鼠爱吃饼干
2020/12/16
2K0
Python爬虫实战案例:取喜马拉雅音频数据详解
『网络爬虫』自从学会了python,斗图就没怕过谁!!
我们还是直接用requests库进行数据请求即可,这里需要注意的是 需要加上带浏览器的请求头,否则会收到404的错误码!
可以叫我才哥
2021/08/05
3650
Python爬虫——Python岗位分析报告
我们输入查询条件以 Python 为例,其他条件默认不选,点击查询,就能看到所有 Python 的岗位了,然后我们打开控制台,点击网络标签可以看到如下请求:
李英杰同学
2019/12/30
5970
python爬虫-唯品会商品信息实战步骤详解
下拉右侧滚动条可以发现,滑动到下面的时候页面会自动刷新出商品的数据,这里就体现了ajax交互,说明商品的信息是存放在json接口中,接着拉到底就可以发现翻页的按钮了,如下
Python研究者
2020/10/22
1.7K0
python爬虫-唯品会商品信息实战步骤详解
Python爬虫练手,一个简单的Python资讯采集案例
一个简单的Python资讯采集案例,列表页到详情页,到数据保存,保存为txt文档,网站网页结构算是比较规整,简单清晰明了,资讯新闻内容的采集和保存!
二爷
2020/07/20
6380
Python爬虫练手,一个简单的Python资讯采集案例
【爬虫软件】用python开发的快手评论批量采集工具:含二级评论
我开发了一款基于Python的快手评论采集软件,该软件能够自动抓取快手视频的评论数据,包括二级评论和展开评论。为便于不懂编程的用户使用,我提供了图形用户界面(GUI),用户无需安装Python环境或编写代码,只需双击即可运行。
马哥python说
2024/03/21
9730
【爬虫软件】用python开发的快手评论批量采集工具:含二级评论
Python爬虫案例教学:批量下载某狗所有热门榜单歌曲(附完整源码)
环境 Python 3.6 Pycharm 模块使用 import os import requests import parsel import re # 模块安装 ''' 如何安装模块: 1. win + R 输入 cmd 输入安装命令:pip install 模块名 回车 2. pycharm里面安装 terminal 输入安装命令:pip install 模块名 回车 模块安装失败的原因: 1. 提示:pip 不是内部命令 你python环境变量可能没有设置好 2. 有安装进度条
松鼠爱吃饼干
2021/09/02
5710
搞定!在某手上搜索视频,并实现下载
相信大家都接触了短视频平台,比如某音、某手等平台,竟然大家都熟悉了,那么今天辰哥分享的技术是:在某手上搜索视频,并实现下载!
Python研究者
2021/08/13
8200
搞定!在某手上搜索视频,并实现下载
源代码和软件 | 采集 1w+ B 站视频评论(年底更新版)
转眼又到年关,不知不觉距离 2023 bilibili 视频评论爬虫 发布已经过去 6 个月了,当时一并分享了 python 3 源代码和 windows 打包软件,收到了不少反馈。
月小水长
2023/12/30
7481
源代码和软件 | 采集 1w+ B 站视频评论(年底更新版)
Python爬虫,Json数据解析图片多线程爬虫!
失踪人口回归系列,新的一年,各位大佬哥如何了,新年好! 搬砖许久,很久没写爬虫了,瞎写的,随便看看就好! 目标网址:https://award.kidp.or.kr/Exhibit/winners.d
二爷
2022/03/29
5510
Python爬虫,Json数据解析图片多线程爬虫!
推荐阅读
相关推荐
Python采集西瓜视频数据,1080P无水印视频版
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验