python带你采集不可言说网站数据,并带你多重骚操作~
前言
嗨喽,大佬们好鸭!这里是小熊猫~
今天我们采集国内知名的shipin弹幕网站!
这里有及时的动漫新番,活跃的ACG氛围,有创意的Up主。
大家可以在这里找到许多欢乐。

目录(可根据个人情况点击你想看的地方)
- 前言
- python方向
- 环境使用:
- 模块使用:
- 秘籍 <适用于任何网站, 采集任何数据>
- 代码 [点击此处领取免费资料](https://jq.qq.com/?_wv=1027&k=2OpBRkgk)
- 1. 导入所需模块
- 2. 模拟浏览器发送请求
- 3. 获取数据 [点击此处领取免费资料](https://jq.qq.com/?_wv=1027&k=2OpBRkgk)
- 4. 保存数据 [点击此处领取免费资料](https://jq.qq.com/?_wv=1027&k=2OpBRkgk)
- 5. 实现搜索功能
- 8. 一个简单的操作界面 [点击此处领取免费资料](https://jq.qq.com/?_wv=1027&k=2OpBRkgk)
- 尾语
python方向
- 爬虫程序 >>> 爬虫工程师 采集数据处理
- 网站开发 >>> 开发工程师
- 数据分析 >>> 数据分析师 处理表格 word
- 自动化
- 游戏开发/辅助
- 人工智能/机器学习 深度学习
- 自动化测试 运维

环境使用:
- Python 3.8
- Pycharm 2021.2版本
- ffmpeg
<需要设置环境变量> 软件的使用 合成视频和音频
模块使用:
需要安装模块
- import requests >>> pip install requests
内置模块 你安装好python环境就可以了
- import re
- import json
- import subprocess
秘籍 <适用于任何网站, 采集任何数据>

一. 数据来源分析 点击此处领取免费资料
- 确定自己需求 <采集网站是那个, 获取数据是什么东西>
- 通过开发者工具进行抓包分析, 分析我们想要数据内容来自于哪里 <通过网页源代码就可以找到相应数据内容>
shipin信息数据 在网页源代码里面 playinfo里面
shipin标题
我们想要数据内容都是来自于网页源代码

I. 用浏览器打开这个所采集的网址
II. 在这个网页上面用鼠标右键点击查看网页源代码 会弹出一个新的窗口
III. ctrl + F 打开搜索框 搜索playinfo 可以找到相关信息数据
IV. ctrl + F 打开搜索框 搜索shipin标题, 也可以找到相关的数据内容
二. 代码实现步骤过程 基本四大步骤
- 发送请求, 模拟浏览器对于url网址发送请求 <专门定义函数来发送请求>
- 获取数据, 获取网页源代码
- 解析数据, 提取我们想要数据内容 <shipin信息以及shipin标题>
- 保存数据, 把shipin内容保存本地







代码 点击此处领取免费资料
1. 导入所需模块
不是内置模块的小可耐们记得安装哦~
import requests # 数据请求模块 <发送请求工具>
import re # 正则表达式
import json # 序列化与反序列
import pprint # 格式化输出模块
import subprocess
import os
因审核机制原因,我把网址里的一些东西删掉了,小可耐们可以自己添加一下哈,很容易的
还有两个字,我用拼音代替了,你们可以改回文字哦 ~
如果有不太会改或者有点点小懒惰的小可耐也可以私信我,我发你呐~
2. 模拟浏览器发送请求
def get_response(html_url, data=None):
"""
发送请求函数
def 关键字 用于自定义函数 get_response 自定义函数名字
:param html_url: 形式参数<不具备实际意义> 传入到这个函数参数 发送请求网址
:return: 响应对象
模拟浏览器发送请求
headers 请求头进行伪装模拟 user-agent 用户代理意思 表示浏览器基本身份标识
<Response [200]> <>在python里面表示对象 响应对象 200 状态码 表示请求成功
相当于打电话, 打通了嘟嘟嘟声音
404 网址不对 相当于你所拨打电话是空号
503 服务器有问题 相当于你所拨打电话不在服务区
403 你没有访问权限 相当于你所拨打电话正在通话中
"""
headers = {
'referer': 'https://www..com/', # 防盗链 告诉服务器你请求url是从哪里跳转过来的
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
}
response = requests.get(url=html_url, params=data, headers=headers)
return response
3. 获取数据 点击此处领取免费资料
def get_video_info(play_url):
"""
获取shipin信息函数
:param play_url: shipin播放详情页
:return: 信息shipin信息
仰望星空脚踏实地
不会用正则 6 通过相关语法,可以对于字符串数据提取自己想要内容 解析数据
re.findall() 通过re模块里面findall 去找到所有我们想要数据内容
从什么地方去找什么样数据内容 从response.text里面去找 "title":"(.*?)","pubdate" 中(.*?) 这段是我们想要数据
'"title":"(.*?)","pubdate"', response.text
保存数据, 标题作为文件名保存, 以字符串数据形式 列表取值
len 统计元素个数 [0] 根据索引位置取值 列表索引位置从0开始计数
type() 内置函数,查看数据类型
"""
# 定义了函数, 一定要调用
response = get_response(html_url=play_url) # 调用前面定义好的发送请求函数 函数是可以重复调用
# print(response.text) # response.text 获取响应对象文本数据 <获取网页源代码> 字符串数据
title = re.findall('"title":"(.*?)","pubdate"', response.text)[0].replace(' ', '') # 标题
title = re.sub(r'[/\:*?"<>|]', '', title)
html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0] # 视频信息
# print(title)
# print(html_data)
# print(type(html_data))
# 为了方便提取数据, 可以把这个html_data 转成json字典数据
json_data = json.loads(html_data)
# print(json_data)
# print(type(json_data)) # 输出一行
# 字符串单双引号使用 外面是单引号里面就要使用双引号
# pprint.pprint(json_data) # 格式化展开效果
# 字典取值, 键值对取值 根据冒号左边的内容<键>, 提取冒号右边的内容<值>
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
video_url = json_data['data']['dash']['video'][0]['baseUrl']
print(audio_url)
print(video_url)
video_info = [title, audio_url, video_url]
return video_info
4. 保存数据 点击此处领取免费资料
def save(title, audio_url, video_url):
"""
保存数据函数
:param title: shipin标题
:param audio_url: 音频url
:param video_url: shipin画面url
:return:
"""
audio_content = get_response(html_url=audio_url).content
video_content = get_response(html_url=video_url).content
with open('video\\' + title + '.mp3', mode='wb') as f:
f.write(audio_content)
with open('video\\' + title + '.mp4', mode='wb') as f:
f.write(video_content)
cmd = f"ffmpeg -i video\\{title}.mp4 -i video\\{title}.mp3 -c:v copy -c:a aac -strict experimental video\\{title}output.mp4"
subprocess.run(cmd, shell=True)
os.remove(f'video\\{title}.mp4')
os.remove(f'video\\{title}.mp3')
print('')
print(title, '视频下载完成')








5. 实现搜索功能
def get_search(page, word):
"""
:param page: 采集多少页
:param word: 搜索关键字
:return:
"""
search_url = 'https://api..com/x/web-interface/search/type'
data = {
'__refresh__': 'true',
'_extra': '',
'context': '',
'page': page,
'page_size': '42',
'from_source': '',
'from_spmid': '333.337',
'platform': 'pc',
'highlight': '1',
'single_column': '0',
'keyword': word,
'category_id': '',
'search_type': 'video',
'dynamic_offset': '84',
'preload': 'true',
'com2co': 'true',
}
json_data = get_response(html_url=search_url, data=data).json()
bv_list = [i['bvid'] for i in json_data['data']['result']]
print(bv_list)
return bv_list
# 6. 采集多个shipin
def get_up_video(page, up_id):
"""
采集up多个shipin
:param page: 采集多少页
:param up_id: shipin博主ID
:return:
"""
up_link = 'https://api..com/x/space/arc/search'
data = {
'mid': up_id,
'ps': '30',
'tid': '0',
'pn': page,
'keyword': '',
'order': 'pubdate',
'jsonp': 'jsonp',
}
json_data = get_response(html_url=up_link, data=data).json()
bv_list = [i['bvid'] for i in json_data['data']['list']['vlist']]
print(bv_list)
return bv_list
# 7. 获取id
def main(bv_id):
"""
主函数
:param bv_id: shipin bv号
:return:
"""
video_info = get_video_info(play_url=f'https://www..com/video/{bv_id}')
save(video_info[0], video_info[1], video_info[2])

8. 一个简单的操作界面 点击此处领取免费资料
if __name__ == '__main__':
# 只要你可以看到数据
msg = """请输入你要进行的操作:
A. 多页数据采集
B. 采集单个shipin
C. 采集番剧
D. 采集某个Up所有shipin内容
0. 即可退出系统
"""
while True:
print(msg)
kew_word = input('请输入你要进行的操作: ')
if kew_word == 'A' or kew_word == 'a':
word = input('请输入你想要下载shipin关键字: ')
page = input('请输入你想要下载shipin页数: ')
for num in range(1, int(page) + 1):
bv_list = get_search(page=num, word=word)
elif kew_word == 'B' or kew_word == 'b':
bv = input('请输入你想要下载shipinBv号: ')
elif kew_word == 'C' or kew_word == 'c':
print('功能还没上线')
elif kew_word == 'D' or kew_word == 'd':
up_id = input('请输入你想要下载up主ID: ')
page = input('请输入你想要下载shipin页数: ')
for num in range(1, int(page) + 1):
get_up_video(page=num, up_id=up_id)
elif kew_word == '0':
break

尾语
成功没有快车道,幸福没有高速路。
所有的成功,都来自不倦地努力和奔跑,所有的幸福都来自平凡的奋斗和坚持
——励志语录
本文章就写完啦~感兴趣的小伙伴可以复制代码去试试
你们的支持是我最大的动力!!记得三连哦~ 欢迎大家阅读往期的文章呀~
我是小熊猫, 咱们下篇文章见啦
python带你采集不可言说网站数据,并带你多重骚操作~的更多相关文章
- python爬取安居客二手房网站数据(转)
之前没课的时候写过安居客的爬虫,但那也是小打小闹,那这次呢, 还是小打小闹 哈哈,现在开始正式进行爬虫书写 首先,需要分析一下要爬取的网站的结构: 作为一名河南的学生,那就看看郑州的二手房信息吧! 在 ...
- 基于Python项目的Redis缓存消耗内存数据简单分析(附详细操作步骤)
目录 1 准备工作 2 具体实施 1 准备工作 什么是Redis? Redis:一个高性能的key-value数据库.支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使 ...
- 23.模拟登录cookies请求速询网站数据
采集速询网站数据: 网站地址:http://www.suxun0752.com/index.html 网站是需要账号登录才给返回信息的,我这里是直接拿的登录后的cookies请求的数据,cookies ...
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...
- API例子:用Python驱动Firefox采集网页数据
1,引言 本文讲解怎样用Python驱动Firefox浏览器写一个简易的网页数据采集器.开源Python即时网络爬虫项目将与Scrapy(基于twisted的异步网络框架)集成,所以本例将使用Scra ...
- [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息
本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...
- python 爬取天猫美的评论数据
笔者最近迷上了数据挖掘和机器学习,要做数据分析首先得有数据才行.对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了.本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也是类似 ...
- python实现简易采集爬虫
#!/usr/bin/python #-*-coding:utf-8-*- # 简易采集爬虫 # 1.采集Yahoo!Answers,parseData函数修改一下,可以采集任何网站 # 2.需要sq ...
- UAVStack JVM监控分析工具:图形化展示采集及分析监控数据
摘要:UAVStack推出的JVM监控分析工具提供基于页面的展现方式,以图形化的方式展示采集到的监控数据:同时提供JVM基本参数获取.内存dump.线程分析.内存分配采样和热点方法分析等功能. 引言 ...
随机推荐
- 那些年uniapp踩过的坑之-------搜索框插件uni-search-bar字体和图标居中的问题
用uniapp必不可少的就是搜索框 但是公司要求的是这样滴 但是 uni-search-bar这个插件给我的偏偏是这样子滴 这个时候我以为是简简单单的样式问题,但是多方调试无果之后才发现,这两个根本不 ...
- 全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图最新数据免费下载 支持shp geojson json sql格式
关键词: 省市区三级, 乡镇四级, 全国, 行政区划, 坐标边界, 矢量数据, 地理围栏, 免费下载, 2018 2019 2020 2021 2022年份, 最新数据, 长期更新, 开源维护, 支持 ...
- http协议 知识点
前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.第一步要学好HTML.CSS和JavaScript!接着就要学习交互,HTTP协议.Tomcat服务器.PHP服务器端技术是必 ...
- 2021.07.26 P1010 幂次方(数论)
2021.07.26 P1010 幂次方(数论) [P1010 NOIP1998 普及组] 幂次方 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.二进制 题意: 用20 ...
- 在Java中==的一个坑
观察下面代码,输出结果是什么? public static void main(String[] args) { Integer p = 10000; Integer q = 10000; Syste ...
- 【面试普通人VS高手系列】ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?
之前分享过一期HashMap的面试题,然后有个小伙伴私信我说,他遇到了一个ConcurrentHashMap的问题不知道怎么回答. 于是,就有了这一期的内容!! 我是Mic,一个工作了14年的Java ...
- postman4.15
测开培训笔记4.15 postman:很主流的API测试工具,也是在工作中使用很广泛的研发工具 queue 队列 先进先出的原则 列如:客户端有100个请求 服务端最多只能承受90个 其余都要排队进行 ...
- Django学习——Django settings 源码、模板语法之传值、模板语法之获取值、模板语法之过滤器、模板语法之标签、自定义过滤器、标签、inclusion_tag、模板的导入、模板的继承
Django settings 源码 """ 1.django其实有两个配置文件 一个是暴露给用户可以自定义的配置文件 项目根目录下的settings.py 一个是项目默 ...
- 2003031121——浦娟——Python数据分析第七周作业——MySQL的安装及使用
项目 要求 课程班级博客链接 20级数据班(本) 作业要求链接 Python第七周作业 博客名称 2003031121--浦娟--Python数据分析第七周作业--MySQL的安装及使用 要求 每道题 ...
- HMS Core地理围栏能力助你实现指定范围人群的精准消息推送
精准推送是移动端产品留存阶段的主要运营手段,精准推送常常会与用户画像紧密结合,针对用户的喜好.画像,采用不同策略,但基于用户所属区域推送消息却很难实现.目前市面上大多数第三方消息推送服务商,在系统未深 ...