Featured image of post Python 爬虫抓取m3u8播放源

Python 爬虫抓取m3u8播放源

Python 爬虫抓取m3u8播放源

Python 爬虫抓取播放源(m3u8)

今天没有事的时候在捯饬 dotPlayer [IOS 平台 APP/¥ 收费] 时发现这个东西是个宝贝呀!可以看 m3u8 格式的视频,这都不是重点,重点是使用起来非常舒服,虽然直接复制 m3u8 链接到 Safari 也可以播放,但是 dotPlayer 还可以有封面和标题!这两者体验可谓是天差地别(我没有收钱哈!我是真的觉得好用,希望 dotplayer 的作者看到了打一下广告费!)

具体可以看

简书作者: NickXXXXXXXX 给出的图片简介

GitHub 上的 help_zh.md 给出的使用简介

这都不是我们需要关注の重点,重点是这款 app 是用来播放 m3u8 流の

播放视频很简单,可是这 m3u8 文件从哪里来呢???

  1. Telegram 加入组群 dotPlayer ,群里经常会分享相关的订阅
  2. 自己动手丰衣足食

这次用的爬虫和上一次一模一样,只是我优化了一下过程,就随便讲讲吧

 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 上,这篇文章,以后就不更新了