背景

前端时间在喜马拉雅上偶然听到牛大宝说的有声小说神通板砖,说的很是幽默,听的正起劲的时候开始收费了,于是我就在网上找了下看看有没有免费版,一搜果然有,但该网站上广告太多了,于是我就写了个小脚本可以批量下载的,供大家学习,如果您使用该脚本用于任何非法用途,均与本站无关

思路

  1. 找到可以免费下载资源网站
  2. 针对该网站html进行分析并编写下载脚本
  3. linux命令行自动顺序播放

实施

找到可以免费下载资源网站

网址: www.ting56.com/mp3/6475.html#liebiao

编写脚本 stbz.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*- from html.parser import HTMLParser
import urllib3
import os http = urllib3.PoolManager()
baseUrl='http://www.ting56.com' class Mp3HTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self) def handle_starttag(self,tag,attrs):
if tag == 'div':
for (k,v) in attrs:
if k=='id' and v=='bofangqi':
print(tag) class MyHTMLParser(HTMLParser): def __init__(self):
self.a_t = False
HTMLParser.__init__(self) def handle_starttag(self, tag, attrs):
"""
recognize start tag, like <div>
:param tag:
:param attrs:
:return:
"""
if tag == 'div':
for (k,v) in attrs:
if k == 'id' and v == 'vlink_1':
self.a_t = True
#print("Encountered a start tag:", tag)
else:
self.a_t = False
if self.a_t:
if tag == 'a':
title = ''
url = ''
for (k,v) in attrs:
if k=='href':
url=baseUrl+v
if k=='title':
title=v
#print('%s %s \n' % (title,url))
download(title,url)
#r = http.request('GET',url)
#dataStr = r.data.decode('gbk')
#parser = Mp3HTMLParser()
#parser.feed(dataStr) # def handle_endtag(self, tag):
# """
# recognize end tag, like </div>
# :param tag:
# :return:
# """
# print("Encountered an end tag :", tag)
#
def handle_data(self, data):
"""
recognize data, html content string
:param data:
:return:
"""
pass
#if self.a_t:
#print(data)
#
# def handle_startendtag(self, tag, attrs):
# """
# recognize tag that without endtag, like <img />
# :param tag:
# :param attrs:
# :return:
# """
# print("Encountered startendtag :", tag)
#
# def handle_comment(self,data):
# """
#
# :param data:
# :return:
# """
# print("Encountered comment :", data) def fromCharCode(n):
return chr(n%256) def download(name,url):
print('%s%s' % (name,url))
cmd = 'echo "%s%s" >> /tmp/stbz/downloadList.txt' % (name,url)
os.system(cmd) try:
if int(name) <= 137:
return
r = http.request('GET',url)
dataStr = r.data.decode('gbk')
os.environ['htmlStr'] = dataStr
cmd = 'echo $htmlStr | sed "s/.*FonHen_JieMa(\([0-9\\\'\*]*\)).*/\\1/g"'
t = os.popen(cmd).read()
t = t[1:-2]
#print(t)
tArr = t.split('*')
tmp = ''
for s in tArr:
if len(s)==0:
continue
tmp = tmp + fromCharCode(int(s))
print(tmp)
datas = tmp.split('&')
print(datas)
cmd = 'curl %s --output /tmp/stbz/%s.%s' % (datas[0],name,datas[2])
if os.system(cmd) != 0:
raise Exception("download err")
except:
print('[err] %s%s ' % (name,url))
cmd = 'echo "%s%s" >> /tmp/stbz/err.txt' % (name,url)
os.system(cmd) if __name__ == "__main__":
os.system('echo "" > /tmp/stbz/downloadList.txt')
r = http.request('GET','http://www.ting56.com/mp3/6475.html#liebiao')
dataStr = r.data.decode('gbk')
#print(dataStr)
parser = MyHTMLParser()
parser.feed(dataStr)

自动播放脚本

下载好的音频文件都是以数字编号的,所以可以播放完一个自动进行下一个,并且记录当前播放记录,方便下次继续播放 将下面的脚本保存为play.sh

#!/usr/bin/env bash

basepath=$(cd `dirname $0`;pwd)
cd $basepath
echo "workspace [$basepath]" posfile="stbz.pos" if [ ! -f "$posfile" ]; then
echo '1.m4a' > ${posfile}
fi pos=$(cat ${posfile})
state="start" for name in `cat ./stbz.lst`;do
if [ $state = "start" ]; then
if [ $pos = $name ]; then
echo "begin play ${pos}"
mplayer $name 1>> /dev/null 2>>err.txt || exit 1
state="play"
echo "${name}" > ${posfile}
fi
else
echo "begin play ${name}"
echo "${name}" > ${posfile}
mplayer $name 1>> /dev/null 2>>err.txt || exit 1
fi
done


原文来自 https://www.h3blog.com/article/python-download-stbz/

python下载神通板砖有声版的更多相关文章

  1. python下载想听的有声书,让喜马拉雅收费,我是程序员!

    from urllib import parse,request import urllib header_dict = {'User-Agent': 'Mozilla/5.0 (Windows NT ...

  2. Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘

    Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:g7v1 作者简介 作为全球Python培训界的领军人物,<Python学习手册:第4版>作者M ...

  3. Python基础教程(第3版)PDF高清完整版免费下载|百度云盘

    百度云盘:Python基础教程(第3版)PDF高清完整版免费下载 提取码:gkiy 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基 ...

  4. Python学习手册(第4版)PDF高清完整版免费下载|百度云盘

    Python学习手册(第4版)PDF高清完整版免费下载|百度云盘 提取码:z6il 内容简介 Google和YouTube由于Python的高可适应性.易于维护以及适合于快速开发而采用它.如果你想要编 ...

  5. Python编程入门(第3版)|百度网盘免费下载|零基础入门学习资料

    百度网盘免费下载:Python编程入门(第3版) 提取码:rsd7 目录  · · · · · · 第1章 编程简介 11.1 Python语言 21.2 Python适合用于做什么 31.3 程序员 ...

  6. Python核心编程(第3版)PDF高清晰完整中文版|网盘链接附提取码下载|

    一.书籍简介<Python核心编程(第3版)>是经典畅销图书<Python核心编程(第二版)>的全新升级版本.<Python核心编程(第3版)>总共分为3部分.第1 ...

  7. Python下载及Python最强大IDEPyCharm下载链接

    Python下载: https://www.python.org/downloads/ PyCharm下载: https://www.jetbrains.com/pycharm/download/#s ...

  8. 学习参考《Python基础教程(第3版)》中文PDF+英文PDF+源代码

    python基础教程ed3: 基础知识 列表和元组 字符串 字典 流程控制 抽象(参数 作用域 递归) 异常 魔术方法/特性/迭代器 模块/标准库 文件 GUI DB 网络编程 测试 扩展python ...

  9. Python环境搭建-3 Python下载

    python环境搭建 Python是一个跨平台.可移植的编程语言,因此可在windows.Linux和Mac OS X系统中安装使用. 安装完成后,你会得到Python解释器环境,可以通过终端输入py ...

随机推荐

  1. [GX/GZOI2019]宝牌一大堆(DP)

    出这种麻将题有意思吗? 乍看很难实则很水,就是麻将式DP,想必大家很熟悉了吧.首先把“国士无双”和“七对子”两种牌型判掉,然后观察牌胡的形式,发现每多一张牌实际上就是把1个面子变成1个杠子,然后可以直 ...

  2. Web 手工测试

    day 1 学习目标: 熟练搭建本地测试环境 掌握熟悉项目的步骤和内容 掌握项目基本的测试流程 基础环境介绍: 项目环境的组成部分: 操作系统 windows win7 win10 Linux Cen ...

  3. Ubuntu 设置静态 IP

    一.背景 如果没有设置静态IP,由于某些情况,会导致系统的 IP 地址发生变化. 为了避免 IP 发生变化,就需要进行静态 IP 的设置. 注:这里 Ubuntu 版本为 19.10 二.解决方案 1 ...

  4. iTOP-4418开发板_重实力_优势突出_有原理图源码开源

    核心板参数 尺寸:50mm*60mm 高度:核心板连接器组合高度1.5mm PCB层数:6层PCB沉金设计 4418 CPU:ARM Cortex-A9 四核 S5P4418处理器 1.4GHz 68 ...

  5. 记录ionic 最小化应用时所遇的问题

    ionic3与ionic4最小化插件安装不一样: ionic3安装方法: $ ionic cordova plugin add cordova-plugin-appminimize $ npm ins ...

  6. python面向对象小tips

    (一).python鸭子类型 python作为动态语言继承和多态与静态语言(像java)有很大的不同:比如说在java中的某个方法,如果传入的参数是Animal类型,那么传入的对象必须是Animal类 ...

  7. python掉包侠与深浅拷贝

    今日所得 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝 包 在学习模块的时候我们了解过模块的四种表现形式,其中的一种就是包. 什么是包? 它是一系列模块文件的结合体,表示 ...

  8. springdatajpa 认识以及使用方式

    1.spingdatajpa是什么? Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架(即上述的:JPA的实现产品),可使开发者用极简 ...

  9. Nginx笔记总结十:Nginx日志切割

    1.Nginx日志切割 logrotate日志文件管理工具,通过cron程序定期执行,默认在cron默认程序的dayli目录下 [root@joker logrotate.d]# cat /etc/c ...

  10. JavaScript中对象数组去重方法

    在一次对后端返回的对象数组的操作时想通过indexOf()或者includes()的方法来实现对对象数组的去重但是行不通,因为用indexOf()返回的都是-1,一下记录两种对象数组(更具指定属性)去 ...