Python 爬虫抓取播放源(m3u8)
今天没有事的时候在捯饬 dotPlayer [IOS 平台 APP/¥ 收费] 时发现这个东西是个宝贝呀!可以看 m3u8 格式的视频,这都不是重点,重点是使用起来非常舒服,虽然直接复制 m3u8 链接到 Safari 也可以播放,但是 dotPlayer 还可以有封面和标题!这两者体验可谓是天差地别(我没有收钱哈!我是真的觉得好用,希望 dotplayer 的作者看到了打一下广告费!)
具体可以看
简书作者: NickXXXXXXXX 给出的图片简介
GitHub 上的 help_zh.md 给出的使用简介
这都不是我们需要关注の重点,重点是这款 app 是用来播放 m3u8 流の
播放视频很简单,可是这 m3u8 文件从哪里来呢???
- 去
Telegram
加入组群 dotPlayer ,群里经常会分享相关的订阅
- 自己动手丰衣足食
这次用的爬虫和上一次一模一样,只是我优化了一下过程,就随便讲讲吧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#coding=utf-8
import requests
from lxml import etree
import time
import datetime
import re
def makeUrl(Num):
# Num为html的页数
allinks=[]
for link in range(1,Num+1):
link="https://www.xxxx.com/xzy{}".format(link)
allinks.append(link)
return allinks
def getRealUrl(fakeUrl):
webPage = requests.get(
url=fakeUrl,
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"}
)
indexPage=webPage.text
indexHtml=etree.HTML(indexPage)
nextPageUrl=indexHtml.xpath("//div[@id='posts']/div[@class='post grid']/h3/a/@href")
picurls=indexHtml.xpath("//div[@class='img']/a/img/@data-src")
Set = []
Set.append(nextPageUrl)
Set.append(picurls)
return Set
def ownSource(realUrl):
webPagess = requests.get(
url=realUrl,
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"}
)
indexPagess=webPagess.text
indexHtmlss=etree.HTML(indexPagess)
title=indexHtmlss.xpath("//header/h1/text()")
source=indexHtmlss.xpath("//div[@class='article-content']/div/@data-item")
finalUrl = []
finalUrl.append(title)
finalUrl.append(source)
return finalUrl
Derailed = makeUrl(110)
for iPhoneSE in Derailed:
ceo = getRealUrl(iPhoneSE)
qq = ceo[0]
a=0
for SourceUrl in qq:
helloWorld = ownSource(SourceUrl)
MUlink=helloWorld[1][0]
realMULinks=MUlink.split('"')
realMULink=realMULinks[5].replace("\\","")
title=helloWorld[0][0].replace(" ","")
thePicUrl = ceo[1][a]
p=re.compile(r"[-,$()#+&*' ]")
lastTitle=re.sub(p,"",title)
str ='{\n'+'"name":"'+lastTitle+'",\n'+'"logo":"'+thePicUrl+'",\n'+'"url":"'+realMULink+'"\n'+'},\n'
with open ("weicha8.json","a+",encoding='utf-8') as f:
f.write(str)
a+=1
print(str)
print(a)
print(datetime.datetime.now())
time.sleep(1)
|
整体分为三个部分:
1
2
3
|
def makeUrl(Num):
def getRealUrl(fakeUrl):
def ownSource(realUrl):
|
def makeUrl(Num):
该函数,接收一个 int
类型的参数, return 一个 字符串列表
这部分就是分析页面链接?的规则,在本地生成 URL ,并返回给下一个函数处理, 爬虫能在本地干的就经量在本地完成,不过度占用服务器的资源,不给站长添堵! 这也是为了自己好??? 俗话说的好:爬虫学的好! … …
def getRealUrl(fakeUrl):
该函数,接收一个 字符串列表
return 一个 嵌套列表
这部分就是接收到上面生成の URL ,访问并分析网页结构。拿到视频的 封面 真实播放页 の URL,并且返回给下一个函数来执行
def ownSource(realUrl):
该函数,接收一个 嵌套列表
return 一个 嵌套列表
这部分也很简单,接收上面来的链接,一个一个的访问,拿到 标题 播放 URL ,然后返回一个 嵌套列表
编写代码
函数已经写好了,我们自己调用即可,需要注意循环嵌套的时候不能犯迷糊就可以,最后处理一下所得到の数据,写入本地 JSON 文件就可以了
虽然我爬虫很菜,但是我在一点点的学习!一起加油吧!!!
最新代码在 Github 上,这篇文章,以后就不更新了