借鉴网上教程,简单写了一个有声小说批量下载,菜鸟级别
自己喜欢听有声小说,常用的网站只能一集一集下载,因此想到用python写一个批量下载的程序,不过几乎没有用过python,所以以下的代码几乎是东拼西凑出来的,不过还是放出来和大家交流一下。import urllib.requestfrom urllib.request import urlretrieve
from urllib.parse import quote
import re
import time
def cbk(a, b, c):
per = 100.0 * a * b / c
if per > 100:
per = 100
print('%.2f%%'%per)
req = urllib.request.Request('http://www.ting89.com/books/14657.html')
file = urllib.request.urlopen(req)
data = file.read().decode('gbk')
result = re.findall("""<a href='/down/\?[^-]+-\d+.html' target="_blank">({3}_[^<]+)</a>""", data)
base_url = 'http://mp3-2.ting89.com:9090/2017/34/抬棺匠/'
for index in range(236, len(result)):
down_url = base_url + result + '.mp3'
urlretrieve(quote(down_url,safe='/:?='), 'E:\python\%s.mp3'%(result), cbk)
print("%s 已下载完毕!"%(result) + '.mp3')
time.sleep(2)
可以看到,小说所在地址,和下载地址基址都是自己给出的,所以比较low
整个过程的主要难点有两个,一个是匹配章节名称时正则表达式的编写;还有一个就是urlretrieve是不支持中文url的,因此需要使用quote转换成ascii编码形式。最后的sleep是因为如果连续下载,远程服务器会强制中断连接,因此在下载之间加了延时。
另外第一次发帖,如果有什么犯规,希望及时指出
本帖最后由 天空宫阙 于 2019-3-25 21:51 编辑
这个网站是提供免费下载的
http://mp3-2.ting89.com:9090/2017/34/抬棺匠/
找的很巧妙
想做一个全网通用的到最后一步才发现下载链接是js渲染的,浪费老子时间
和楼主完全一样的实现思路,给各个功能分开成函数
不是很会urllib这个库,所以保存部分用了requests库
增加对本地保存路径的检测,没有相应文件夹自动创建,有声书保存在E盘python_down文件夹内
楼主正则表达式用的不错
import requests
import urllib.request
import re
import time
import os
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
}
root = "E://python_down//"
base_url = 'http://mp3-2.ting89.com:9090/2017/34/抬棺匠/'
#保存指定URL的文件
def save_a_file(url,path):
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
response =requests.get(url,headers=headers)
with open(path,'wb') as f:
f.write(response.content)
f.close
print('文件保存成功')
else:
print('文件已经存在')
except:
print('爬取失败')
#得到有声小说列表
def get_index():
req = urllib.request.Request('http://www.ting89.com/books/14657.html')
file = urllib.request.urlopen(req)
data = file.read().decode('gbk')
result = re.findall("""<a href='/down/\?[^-]+-\d+.html' target="_blank">({3}_[^<]+)</a>""", data)
return result
if __name__ == '__main__':
name_list = get_index()
for index in range(236, len(name_list)):
down_url = base_url + name_list + '.mp3'
print(down_url)
path = root + name_list+'.mp3'
save_a_file(down_url,path)
time.sleep(1.5)
效果
天空宫阙 发表于 2019-3-25 20:24
这个网站是提供免费下载的
http://mp3-2.ting89.com:9090/2017/34/抬棺匠/
找的很巧妙
路径检测其实很有必要:handshake,一起交流学习,感觉python还是很强大的 学习了,看看能不能用得上 还是不懂,为小白弄个更简单点的呗 不会用python,好多东西只能看着 简单了,不过感谢分享!!!! 可以加上自动输入URL根据URL输入下载。目前只能源代码级别修改。 看不懂诶{:1_908:} 毫无影 发表于 2019-3-24 11:04
看不懂诶
很水。。。。。 ytahdou 发表于 2019-3-24 10:59
可以加上自动输入URL根据URL输入下载。目前只能源代码级别修改。
对的,网上看到的有的输入书名就可以下载,我现在得在审查元素找到下载基址。。。 haile319 发表于 2019-3-24 10:41
还是不懂,为小白弄个更简单点的呗
已经是小白了
页:
[1]
2