Python爬虫实战教程:从数据来源分析到代码实现完整步骤

知识点开发环境:案例实现步骤:一. 数据来源分析

Python爬虫实战教程:从数据来源分析到代码实现完整步骤

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

1.确定需求 (要爬取的内容是什么?)

使用开发者工具来进行抓包分析,以确定数据是从哪里来的(找出真正的数据来源)。

有 80 集 Python 基础入门视频教学,只要看了这些视频教学就能学会相关内容,这是付费 VIP 完整版的教程。

点这里即可免费在线观看

二. 代码实现过程

今天的目标

三. 单个视频导入所需模块

import json
import requests
import re

发送请求

data = {
operationName 为 "visionSearchPhoto"。
visionSearchPhoto 方法执行时需传入上述参数,其返回结果包含 result、llsid、webPageArea 等字段,feeds 字段包含 type、author、tags、photo 等子字段,author 子字段包含 id、name、following、headerUrl、headerUrls 等信息,headerUrls 又包含 cdn、url、__typename 等,photo 子字段包含 id、duration、caption、likeCount、realLikeCount、coverUrl、photoUrl、liked、timestamp、expTag、coverUrls、photoUrls、animatedCoverUrl、stereoType、videoRatio 等信息,还包含 canAddComment、currentPcursor、llsid、status、__typename 等字段,同时还返回 searchSessionId、pcursor、aladdinBanner 等信息,aladdinBanner 包含 imgUrl、link、__typename 等。
 'variables': {
  'keyword': '张三',
  'pcursor': ' ',
  'page': "search",
'searchSessionId' 是 "MTRfMjcwOTMyMTQ2XzE2Mjk5ODcyODQ2NTJf5oWi5pGHXzQzMQ"
 }
使用 requests 库发送一个 POST 请求,请求的地址是 'https://www.kuaishou.com/graphql',请求的数据是 data 。

加请求头

headers = {
Content-Type 的格式有四种,分别对应着 data。这四种格式分别是:格式一、格式二、格式三、格式四。
 # 爬虫基础/xml: 把xml作为一个文件来传输
 # multipart/form-data: 用于文件上传
内容类型为 JSON 格式。
 # 用户身份标识
'Cookie' 包含以下信息:kpf 为 PC_WEB;kpn 为 KUAISHOU_VISION;clientid 为 3;did 为 web_721a784b472981d650bcb8bbc5e9c9c2
 # 浏览器信息 (伪装成浏览器发送请求)
"Mozilla/5.0 表示用户代理的版本信息,其运行在 Windows NT 10.0 的操作系统上,且为 64 位系统,即 Win64;同时,浏览器内核为 AppleWebKit/537.36,其呈现方式类似 Gecko;当前使用的浏览器是 Chrome/91.0.4472.124,其渲染引擎为 WebKit,而整体的浏览器标识为 Safari/537.36。"
}

json序列化操作

JSON 数据交换格式。在 JSON 出现之前,大家一直将 XML 用于传递数据。
各个语言都支持 JSON ,JSON 能够支持各种数据类型,因此 JSON 常被用于我们日常的 HTTP 交互以及数据存储等方面。
# 将python对象编码成Json字符串
data = json.dumps(data)
使用 requests 库的 post 方法向 'https://www.kuaishou.com/graphql' 发送请求,请求头为 headers,请求数据为 data,然后将返回的响应转换为 json 格式并赋值给 json_data 。

字典取值

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)

再次发送请求

使用 requests 库发送 GET 请求获取 photoUrl 对应的内容,获取到的内容存储在 resp 中

保存数据

使用“wb”模式打开名为“video\”加上“title”再加上“.mp4”的文件,将其赋值给变量 f 。
 f.write(resp)
print(title, '爬取成功!!!')

四. 翻页爬取导入模块

import concurrent.futures
import time

发送请求

def get_json(url, data):
使用 requests 库发送 POST 请求,请求的地址是 url,请求头是 headers,请求数据是 data,然后将返回的 JSON 数据赋值给 response 。
 return response

修改标题

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

数据提取

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 进行了处理后得到。
data 中的['photo']['photoUrl']被赋值给了 url_1
info_list 中添加了一个包含新标题和第一个 URL 的列表,即 [new_title, url_1] 被添加到了 info_list 中。
 return info_list

保存数据

def save(title, url_1):
使用 requests 库发送 GET 请求获取 url_1 的内容,获取到的内容赋值给 resp 变量。
打开名为"video\\"加上 title 再加上 ".mp4"的文件,以二进制写入模式"wb"打开,将其赋值给变量 f 。
  f.write(resp)
 print(title, '爬取成功!!!')

主函数 调动所有的函数

def run(url, data):
 """主函数 调动所有的函数"""
获取到的 json 数据是通过调用 get_json 函数,并传入 url 和 data 这两个参数而得到的。
 info_list = parse(json_data)
对于标题和 url_1 ,它们来自 info_list 。
  save(title, url_1)
if __name__ == '__main__':
 start_time = time.time()
将其作为执行器使用。
  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 {\ntype\nauthor {\n  id\n  name\n  following\n  headerUrl\n  headerUrls {\n cdn\n url\n __typename\n  }\n  __typename\n}\ntags {\n  type\n  name\n  __typename\n}\nphoto {\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}\ncanAddComment\ncurrentPcursor\nllsid\nstatus\n__typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\nimgUrl\nlink\n__typename\n }\n __typename\n  }\n}\n",
 'variables': {
  'keyword': '曹芬',
  # 'keyword': keyword,
  'pcursor': str(page),
  'page': "search",
  'searchSessionId': "MTRfMjcwOTMyMTQ2XzE2Mjk5ODcyODQ2NTJf5oWi5pGHXzQzMQ"
 }
}
data = json.dumps(data)
提交执行器来运行指定的内容,包括传入的 URL 和数据。具体来说,是将 run 函数与 url、data 等参数一起提交给 executor 去执行。
输出“一共花费了:”,然后输出时间差,即 time.time()减去 start_time 的结果

耗时为57.7秒

这篇关于 Python 爬虫实战之批量下载快手平台视频数据的文章到此就介绍完毕了。更多关于 Python 批量下载快手视频的内容,大家可以搜索本站以前的文章,或者继续浏览下面的相关文章。希望大家以后能多多支持本站!

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读