import
base64
import
json
import
re
import
time
from
pathlib
import
Path
from
urllib
import
parse
import
requests
from
hm3u8dl_cli
import
m3u8download
from
loguru
import
logger
from
lxml
import
etree
from
urllib3
import
disable_warnings
disable_warnings()
if
not
Path(
'logs'
).exists(): Path(
'log'
).mkdir(parents
=
True
, exist_ok
=
True
)
logger.add(f
'logs/bluelog_{time.strftime("%Y%m%d_%H%M%S", time.localtime())}.log'
, level
=
'INFO'
)
class
BlueSpider:
def
__init__(
self
, url):
self
.url
=
url
self
.headers
=
{
'User-Agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.44'
,
'Host'
:
'www.lgyy.vip'
}
def
get_html(
self
):
res
=
requests.get(
self
.url, headers
=
self
.headers, verify
=
False
)
res.encoding
=
'utf-8'
return
res.text
def
parse_html(
self
, html):
logger.info(
'开始解析网页'
)
selector
=
etree.HTML(html)
tags
=
selector.xpath(
'//div[@class="player-box-main"]//script/text()'
)
for
i
in
tags:
if
i.startswith(
'var player_aaaa'
):
_unicode
=
i.encode(
'utf8'
)
rx
=
_unicode.decode(
"unicode_escape"
)
rx
=
parse.unquote(rx)
rx
=
json.loads(rx.replace(
'var player_aaaa='
, ''))
title
=
rx.get(
'vod_title'
)
_url
=
rx.get(
'url'
)
return
title, _url
def
get_html_again(
self
, url):
url
=
f
'https://www.lgyy.vip/static/player/ffzy.php?url={url}'
response
=
requests.request(
"GET"
, url, headers
=
self
.headers, verify
=
False
)
base64_url
=
re.findall(r
'var\surl.*?;'
, response.text)[
1
]
return
base64_url[
12
:
-
2
]
def
decode_url(
self
, _url):
logger.info(f
'开始解析{_url}'
)
xz
=
base64.b64decode(bytes(_url[
8
:], encoding
=
'utf-8'
))
logger.info(f
'解析完成后地址{xz.decode()[8:-8]}'
)
return
xz.decode()[
8
:
-
8
]
def
downlaod_m3u8(
self
, title, m3u8_url):
logger.info(f
'准备下载{title}'
)
m3u8download(m3u8_url, title)
logger.info(f
'下载完成!'
)
@logger
.catch
def
run(
self
):
title, _url
=
self
.parse_html(
self
.get_html())
base64_url
=
self
.get_html_again(_url)
m3u8_url
=
self
.decode_url(base64_url)
self
.downlaod_m3u8(title, m3u8_url)
if
__name__
=
=
'__main__'
:
target_url
=
"https://www.lgyy.vip/vodplay/84617-1-1.html"
BlueSpider(target_url).run()