Python 爬虫 爬取A站视频

一、环境使用

Python 3.8

Pycharm

二、模块使用

import requests >>> pip install requests

内置模块 你安装好python环境就可以了

import re

import json

三、模块安装问题

win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)

模块安装问题:

  • 如何安装python第三方模块:

  • win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  • 在pycharm中点击Terminal(终端) 输入安装命令

  • 安装失败原因:

  • 失败一: pip 不是内部命令

解决方法: 设置环境变量

  • 失败二: 出现大量报红 (read time out)

解决方法: 因为是网络链接超时, 需要切换镜像源

清华:https://pypi.tuna.tsinghua.edu.cn/simple

阿里云:https://mirrors.aliyun.com/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:https://pypi.hustunique.com/

山东理工大学:https://pypi.sdutlinux.org/

豆瓣:https://pypi.douban.com/simple/

例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名

  • 失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入

解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好

或者你pycharm里面python解释器没有设置好

四、配置pycharm里面的python解释器

  1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)

  2. 点击齿轮, 选择add

  3. 添加python安装路径

五、pycharm如何安装插件

  1. 选择file(文件) >>> setting(设置) >>> Plugins(插件)

  2. 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese

  3. 选择相应的插件点击 install(安装) 即可

  4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效

六、爬虫基本流程思路:

爬虫是什么?

采集网页上面数据程序, 模拟浏览器对于url地址发送请求 获取服务器响应数据

采集一个视频, 然后再采集多个视频, 最后采集多页

(1). 数据来源分析

  1. 确定自己需求, 采集那个网站什么数据内容

  2. 通过开发者工具进行抓包分析, 分析我们想要视频内容以及视频标题来自于哪里

  3. F12 或者鼠标右键点击检查 选择 network

A站这个网站视频内容, m3u8视频格式

m3u8视频格式 —> 了解 1 不知道 2

正常是一个视频内容 完整数据 —> 2分18秒

m3u8视频格式 —> 会把完整视频内容 分割成非常多个小片段 (ts文件)

一个小片段 可能是5-10秒钟时间

所有视频片段

m3u8视频内容, 你看10秒钟 他就给加载10秒钟的数据

通过分析, 视频内容 —> ts文件 分片段 —> m3u8文件链接 –> 网页源代码里

(2). 代码实现步骤: 发送请求 获取数据 解析数据 保存数据

  1. 发送请求, 对于视频播放页url地址发送请求

  2. 获取数据, 网页源代码

  3. 解析数据, 提取我们想要 m3u8链接地址 以及 视频标题

  4. 发送请求, 对于m3u8链接地址发送请求

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

  6. 解析数据, 提取所有ts文件链接

  7. 保存数据,

  8. 特殊字符

  9. 你保存数据之后 播放有问题 视频内容播放

七、完整代码

导入数据请求模块  ---> 第三方模块 需要安装 cmd pip install requestsimport requests# 导入re正则模块 ---> 内置模块 不需要import re# 导入json  ---> 内置模块 不需要import json# 导入格式化输出模块  ---> 内置模块 不需要from pprint import pprint# 确定请求url地址link = 'https://www.acfun.cn/u/29946310'# 请求参数 ctrl + R 选中内容 输入正则命令 点击替换即可  (.*?): (.*)  '$1': '$2',data = {    'quickViewId': 'ac-space-video-list',    'reqID': '3',    'ajaxpipe': '1',    'type': 'video',    'order': 'newest',    'page': '2',    'pageSize': '20',    't': '1658842573436',}headers = {    # 用户代理 表示浏览器基本身份标识 用来伪装python代码的    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'}# 发送请求response_1 = requests.get(url=link, params=data, headers=headers)# 获取数据 pprint(response_1.text)# 解析数据video_id_list = re.findall('"atomid.*?":.*?"(\d+).*?"', response_1.text)print(video_id_list)for video_id in video_id_list:    """    1. 发送请求, 对于视频播放页url地址发送请求        模拟浏览器发送请求        python代码如何实现模拟浏览器?            使用请求头伪装 headers        模块 你使用到了 再去导入,        不加headers相当于裸奔...        headers  相当于衣服....        先听思路, 在课后找落落要录播 在自己去写代码    采集多个数据 ---> 分析请求url变化规律    """    # 确定url地址    url = f'https://www.acfun.cn/v/ac{video_id}'    # 模拟浏览器  ---> 在开发者工具里面直接复制    headers = {        # 用户代理 表示浏览器基本身份标识 用来伪装python代码的        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'    }    # 发送请求 ---> : <>表示对象 response 回复响应 200 状态码表示请求成功    response = requests.get(url=url, headers=headers)    # 得到响应对象    print(response)    # 2. 获取数据, 获取文本数据 响应对象文本数据 print(response.text)    """    3. 解析数据, 提取我们想要数据内容 选择最适合方法, 最好用的        - m3u8文件链接        - 视频标题        re css xpath 这三个都要学习掌握... 你从事爬虫工程师            这三个知识点, 系统课程全部都会教授...        re 会用 1 不会 2        re.findall()  找到所有我们想要数据内容        从什么地方去找什么数据        从 response.text 里 找  (.*?) - AcFun弹幕视频网 其中 (.*?)        . 可以匹配任意字符        * 可以匹配前一个字符 0 或者无限        ? 非贪婪匹配模式        .*? 通配符 可以匹配任意字符   re.S    """    # 提取视频标题    title = re.findall('(.*?) - AcFun弹幕视频网', response.text)[0]    # 提视频m3u8信息    html_data = re.findall('window.pageInfo = window.videoInfo = (.*?);', response.text)[0]    print(title)    # 转换数据类型    json_data = json.loads(html_data)    # 格式化输出  调用pprint文件里面pprint函数 这个知识点函数知识点 pprint(json_data)    # 字典取值 根据冒号左边的内容[键], 提取冒号右边的内容[值] 键值对取值  字典是单引号, 字符串是双引号    m3u8_url = \    json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0]    print(m3u8_url)    # 发送请求 + 获取数据    m3u8_data = requests.get(url=m3u8_url, headers=headers).text    # 把含有#E 内容都替换掉  split() 分割 返回列表    m3u8_data = re.sub('#E.*', '', m3u8_data).split()    for ts in m3u8_data:        ts_url = 'https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/' + ts        # 保存数据        ts_content = requests.get(url=ts_url, headers=headers).content        # mode ab 保存方式 a追加保存 b 二进制        # video\\' + title + '.mp4' file 文件路径 文件名字后缀        with open('video\\' + title + '.mp4', mode='ab') as f:            # 写入数据            f.write(ts_content)        print(ts_url)

Python 爬虫 爬取A站视频

Original: https://blog.51cto.com/u_15668438/5583564
Author: lanxiaofang
Title: Python 爬虫 爬取A站视频

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/500691/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球