【python】喜欢XJJ?这不得来一波大采集?

1年前未命名233
【python】喜欢XJJ?这不得来一波大采集? 搬砖python中~ 于2023-03-17 13:50:44发布 4352 收藏 54 分类专栏: 爬虫小案例 文章标签: python 开发语言 pycharm 爬虫小案例 专栏收录该内容 64 篇文章 18 订阅 订阅专栏 前言

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

俗话说的好:技能学了~就要用在自己喜欢得东西上!!

这我不得听个话~我喜欢小姐姐,跳舞的小姐姐

这不得用python把小姐姐舞采集下来~嘿嘿嘿


完整源码、素材皆可点击文章下方名片获取此处跳转
知识点:

采集基本流程

re正则表达式简单使用

requests

json数据解析方法

数据保存


采集网站:


开发环境:

Python 3.8

Pycharm


模块使用:

requests >>> pip install requests 第三方模块

re

安装模块:win + R 输入cmd 输入安装命令 pip install 模块名

如果出现爆红 可能是因为 网络连接超时 切换国内镜像源


基本流程(固定): 一. 数据来源分析

确定采集内容是什么? (目标网址, 网址里面数据)

通过开发者工具进行抓包分析, 分析我们想要数据 通过请求那个url地址可以获得

I. 通过分析可以知道 播放url地址是什么?

II. 通过播放地址, 去分析找寻, 数据包是在哪?

III. 通过两个数据包 请求参数对比, 可以知道 只要获取所有ID 就可以获取内容

(图片id MP4ID 音乐ID 还是什么ID 都可以去列表页面获取)

IV. 去分析 mp4ID可以从哪里获取 (一般情况都可以在列表页面获取)

我想要获取播放地址 >>> 要得到数据包 >>> 获取ID

二. 代码实现步骤 发送请求 获取数据 解析数据 保存数据

发送请求, 对于舞蹈列表页面发送请求

获取数据, 服务器返回数据内容

解析数据, 提取我们想要数据内容 ID

发送请求, 把ID传入到 数据包里面 发送请求

获取数据, 服务器返回数据内容

解析数据, 提取我们想要数据内容 标题 以及播放地址

保存数据, 把内容保存本地

多页数据采集


代码

(完整源码、素材皆可点击此处+获取)

导入模块

# 导入数据请求模块 import requests # 第三方模块 pip install requests 需要自行安装 # 导入re正则表达式 import re # 内置模块 不需要安装 # 导入格式化输出模块 import pprint # 内置模块 不需要安装 发送请求, 对于舞蹈视频列表页面发送请求 for page in range(1, 11): print(f'正在爬取第{page}页的数据内容') url = f'https:// **** .com/g/all?set_id=51&order=hot&page={page}' # 爬虫是模拟浏览器对于服务器发送请求, 然后获取服务器返回数据内容 # user-agent: 用户代理 表示浏览器基本身份信息 (一种简单反反爬手段) headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36' } # 通过requests模块里面get请求方式对于url地址发送请求, 并且携带上headers请求进行伪装, 最后用自定义变量response接收返回数据 response = requests.get(url=url, headers=headers) # <Response [200]> 表示请求成功, 请求网址成功了 *** 200状态码表示请求成功, 但是不一定能够得到数据 获取数据, 服务器返回数据内容 response.text 获取响应文本数据 # print(response.text) 解析数据, 提取我们想要数据内容 视频ID # 解析方式: css re xpath # <li data-vid="676382675"> 想要数据 可以(.*?) 从response.text 里面去找寻这样数据内容 # .*? 是可以匹配任意字符(除了\n换行符以外) 如果你只是单纯提取数字 最好用 \d+ 匹配一个或者多个数字 video_ids = re.findall('<li data-vid="(\d+)">', response.text) # 返回列表数据 for video_id in video_ids: # 通过for循环遍历 提取列表里面元素 一个一个提取 # print(video_id)

发送请求, 把视频ID传入到视频数据包里面发送请求

获取数据, 服务器返回数据内容

# f 字符串格式化方法 {} 占位符 video_info = f'https:// **** .com/moment/getMomentContent?videoId={video_id}&uid=&_=1647433310180' json_data = requests.get(url=video_info, headers=headers).json() # print(json_data) # pprint.pprint(json_data) # 根据冒号左边的内容, 提取冒号右边的内容 解析数据 title = json_data['data']['moment']['title'] video_url = json_data['data']['moment']['videoInfo']['definitions'][0]['url'] 保存数据 >>> 发送请求 并且获取数据 """ response.text >>> 文本数据返回字符串数据 response.json() >>> json字典数据 response.content >>> 二进制数据 """ video_content = requests.get(url=video_url, headers=headers).content with open('video\\' + title + '.mp4', mode='wb') as f: f.write(video_content) print(title, video_url)

尾语 💝

好了,今天的分享就差不多到这里了!

完整代码、更多资源、疑惑解答直接点击下方名片自取即可。

对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇

标签: [db:标签TAG]

相关文章

综述 | 深度强化学习在自动驾驶中的应用

综述 | 深度强化学习在自动驾驶中的应用...

【Web开发】Python实现Web服务器(Docker下部署Flask)

【Web开发】Python实现Web服务器(Docker下部署Flask)...

【C++提高编程】C++全栈体系(十六)

【C++提高编程】C++全栈体系(十六)...

一文了解HTTP、HTTPS、TCP、UDP、Websocket(论点:概念、通信流程、异同点、应用领域)

一文了解HTTP、HTTPS、TCP、UDP、Websocket(论点:概念、通信流程、异同点、应用领域)...

Spring 整合Mybatis。

Spring 整合Mybatis。...

初始网络编程

初始网络编程...