Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张益达_py
爬虫100例(复盘中)
提交
eb2859a1
爬
爬虫100例(复盘中)
项目概览
张益达_py
/
爬虫100例(复盘中)
与 Fork 源项目一致
Fork自
梦想橡皮擦 / 爬虫100例(复盘中)
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
爬
爬虫100例(复盘中)
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
eb2859a1
编写于
9月 16, 2021
作者:
梦想橡皮擦
💬
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
python 采集VIP视频
上级
2cd79799
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
188 addition
and
0 deletion
+188
-0
无法过审的文章备份/Python爬虫入门教程 50-100 Python3爬虫爬取VIP视频-Python爬虫6操作.md
...的文章备份/Python爬虫入门教程 50-100 Python3爬虫爬取VIP视频-Python爬虫6操作.md
+188
-0
未找到文件。
无法过审的文章备份/Python爬虫入门教程 50-100 Python3爬虫爬取VIP视频-Python爬虫6操作.md
0 → 100644
浏览文件 @
eb2859a1
## 爬虫背景
原计划继续写一下关于手机APP的爬虫,结果发现夜神模拟器总是卡死,比较懒,不想找原因了,哈哈,所以接着写后面的博客了,从50篇开始要写几篇python爬虫的骚操作,也就是用Python3通过爬虫实现一些小工具。
## Python3 视频下载器
这种软件或者网站满天都是了,就是在线观看收费网站的VIP视频,你只要会玩搜索引擎或者是一个程序员基本都知道,虽说一直在被封杀,但是能赚钱的地方就一定有人钻漏洞。今天要实现的就是通过别人的API在Python中下载ts视频到本地,自己去百度一下TS视频是什么吧。
![
python3图片爬虫
](
https://img-blog.csdnimg.cn/20190214094234749.png#pic_center
)
## 找相关的接口
我随便搜索了一下,那是非常多的,版权问题,就不放相关的地址了,当然在代码中还是会出现一下的。
我找到这个接口应该是目前相对比较稳定的,并且还在更新的
我看了一下,他中间主要通过三个API整体实现的页面逻辑
首先你先去优酷啊,腾讯啊,爱奇艺啊找个VIP视频的地址,这个随意啦
我找了一个《叶问外传》
http://v.youku.com/v_show/id_XNDA0MDg2NzU0OA==.html?spm=a2h03.8164468.2069780.5
![
python3图片爬虫
](
https://img-blog.csdnimg.cn/20190214095126851.png#pic_center
)
### 编写代码几个步骤
在浏览器测试播放地址,得到线路播放数据
http://y.mt2t.com/lines?url=https://v.qq.com/x/cover/5a3aweewodeclku/b0024j13g3b.html
![
在这里插入图片描述
](
https://img-blog.csdnimg.cn/20190214095617399.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hpaGVsbA==,size_16,color_FFFFFF,t_70
)
在页面的源码中,请注意,打开开发者工具直接按
`快捷键F12`
即可,右键已经被锁定。
在源码中,发现真实的调用地址
![
python3图片爬虫
](
https://img-blog.csdnimg.cn/20190214100538557.png
)
所以,你需要先匹配出来key来,非常简单,使用正则表达式即可
```
py
import
requests
import
re
class
VIP
(
object
):
def
__init__
(
self
):
self
.
api
=
"http://y.mt2t.com/lines?url="
self
.
url
=
"http://v.youku.com/v_show/id_XNDA0MDg2NzU0OA==.html?spm=a2h03.8164468.2069780.5"
def
run
(
self
):
res
=
requests
.
get
(
self
.
api
+
self
.
url
)
html
=
res
.
text
key
=
re
.
search
(
r
'key:"(.*?)"'
,
html
).
group
(
1
)
print
(
key
)
if
__name__
==
'__main__'
:
vip
=
VIP
()
vip
.
run
()
```
得到key之后,就可以进行获取播放地址了,经过分析也可以知道接口为
Request URL: http://y.mt2t.com/lines/getdata
Request Method: POST
那么只需要编写一下即可
```
py
import
requests
import
re
import
json
class
VIP
(
object
):
def
__init__
(
self
):
self
.
api
=
"http://y.mt2t.com/lines?url="
self
.
post_url
=
"http://y.mt2t.com/lines/getdata"
self
.
url
=
"http://v.youku.com/v_show/id_XNDA0MDg2NzU0OA==.html?spm=a2h03.8164468.2069780.5"
def
run
(
self
):
res
=
requests
.
get
(
self
.
api
+
self
.
url
)
html
=
res
.
text
key
=
re
.
search
(
r
'key:"(.*?)"'
,
html
).
group
(
1
)
return
key
def
get_playlist
(
self
):
key
=
self
.
run
()
data
=
{
"url"
:
self
.
url
,
"key"
:
key
}
html
=
requests
.
post
(
self
.
post_url
,
data
=
data
).
text
dic
=
json
.
loads
(
html
)
print
(
dic
)
if
__name__
==
'__main__'
:
vip
=
VIP
()
vip
.
get_playlist
()
```
上面的代码可以得到如下的数据集
![
python3图片爬虫
](
https://img-blog.csdnimg.cn/2019021410145125.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hpaGVsbA==,size_16,color_FFFFFF,t_70
)
这个数据集需要解析一下,用来获取播放地址,请注意还有一个接口我们需要打通
Request URL: http://y2.mt2t.com:91/ifr/api
Request Method: POST
参数如下
url: +bvqT10xBsjrQlCXafOom96K2rGhgnQ1CJuc5clt8KDHnjH75Q6BhQ4Vnv7gUk+SpJYws4A93QjxcuTflk7RojJt0PiXpBkTAdXtRa6+LAY=
type: m3u8
from: mt2t.com
device:
up: 0
这个API的所有参数都是从刚才获得的数据集分解出来的
提取上面结果集中的URL
http://y2.mt2t.com:91/ifr?url=%2bbvqT10xBsjrQlCXafOom96K2rGhgnQ1CJuc5clt8KDHnjH75Q6BhQ4Vnv7gUk%2bSpJYws4A93QjxcuTflk7RojJt0PiXpBkTAdXtRa6%2bLAY%3d&type=m3u8
对这个URL进行分解,这个地方你需要了解一般情况下URL进行哪些符号的特殊编码
**大小写都有可能**
|符号 |特殊编码 |
|--|--|
| +| %2d |
| /| %2f |
| %| %25 |
| =| %3d |
| ?| %3F |
| #| %23 |
| &| %26 |
所以编写的代码如下
```
py
def
url_spilt
(
self
):
url
=
"http://y2.mt2t.com:91/ifr?url=%2bbvqT10xBsjrQlCXafOom96K2rGhgnQ1CJuc5clt8KDHnjH75Q6BhQ4Vnv7gUk%2bSpJYws4A93QjxcuTflk7RojJt0PiXpBkTAdXtRa6%2bLAY%3d&type=m3u8"
url
=
url
.
split
(
"?url="
)[
1
].
split
(
"&"
)[
0
].
replace
(
"%2b"
,
"+"
).
replace
(
"%3d"
,
"="
).
replace
(
"%2f"
,
"/"
)
print
(
url
)
```
接下来获取
`type`
这个比较容易
只需要判断以下
`type=`
是否在字符串中然后截取即可。
#### url截取的代码如下
```
py
def
url_spilt
(
self
,
url
):
#url = "http://y2.mt2t.com:91/ifr?url=%2bbvqT10xBsjrQlCXafOom96K2rGhgnQ1CJuc5clt8KDHnjH75Q6BhQ4Vnv7gUk%2bSpJYws4A93QjxcuTflk7RojJt0PiXpBkTAdXtRa6%2bLAY%3d&type=m3u8"
url_param
=
url
.
split
(
"?url="
)[
1
].
split
(
"&"
)[
0
].
replace
(
"%2b"
,
"+"
).
replace
(
"%3d"
,
"="
).
replace
(
"%2f"
,
"/"
)
if
"type="
in
url
:
type
=
url
.
split
(
"type="
)[
1
]
else
:
type
=
""
return
url_param
,
type
```
#### 完善get_playlist函数,最终的代码如下
```
py
def
get_playlist
(
self
):
key
=
self
.
run
()
data
=
{
"url"
:
self
.
url
,
"key"
:
key
}
html
=
requests
.
post
(
self
.
post_url
,
data
=
data
).
text
dic
=
json
.
loads
(
html
)
for
item
in
dic
:
url_param
,
type
=
self
.
url_spilt
(
item
[
"Url"
])
res
=
requests
.
post
(
self
.
get_videourl
,
data
=
{
"url"
:
url_param
,
"type"
:
type
,
"from"
:
"mt2t.com"
,
"device"
:
""
,
"up"
:
"0"
})
play
=
json
.
loads
(
res
.
text
)
print
(
play
)
```
运行之后得到下面的提示,其中最重要的m3u8已经成果获取到,完成任务
![
python3图片爬虫
](
https://img-blog.csdnimg.cn/20190214104001399.png
)
![
python3图片爬虫
](
https://img-blog.csdnimg.cn/2019021410414111.png#pic_center
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录