Python爬取有声小说


通过python爬取网站的资源,实现批量下载功能:

记录一次自己的学习经历,小白,非专业,难免有不足之处,望读者取其精华!

摘要

功能如下:

1.批量下载

2.批量命名

3.界面化显示

使用工具:

1.pycharm

2.网站为 https://www.qktsw.net/ (如有侵权请联系作者删除)

整体思路:

1.请求网站,根据返回的网站源码,查找包含资源链接的标签

2.请求资源链接,将资源保存的本地,并命名

3.分析包含资源的网页规律(url),循环爬取

4.设计界面,实现自动分析,方便操作

5.(可选项)打包成exe文件,提升移植性

1.获取下载链接

#获取下载链接的方法
def getinfo(url0):
#请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
}
#请求网页数据
req = requests.get(url=url0, headers=headers)
req.encoding = 'gb2312'
html = req.text
# 通过正则查找下载链接
res = re.findall(r"http://(.*).m4a", html)
# 拼合链接
res = 'http://' + res[0]+'.m4a'
#print(res)
return res

2.分析规律,循环爬取

	#设置所要下载的起始终止集数
begin = int(begin0)
end = int(end0)
#全局变量 批量命名时的集数
global file_name_num
file_name_num = begin
#正则匹配包含资源链接页的规律 wangzhi为后期界面传过来的网址数据
wangzhi_1 = wangzhi
strinfo = re.compile('-(\d|\d\d|\d\d\d|\d\d\d\d).shtml')
wangzhi_2 = strinfo.sub('-{}.shtml', wangzhi_1)
#https://www.qktsw.net/ting-book-play-3483-1-2.shtml
#根据匹配规则实现循环访问页面 详情页
urls = [wangzhi_2.format(str(i)) for i in range(begin, end+1)]
#'https://www.qktsw.net/ting-book-play-3483-1-{}.shtml'
#https://www.qktsw.net/ print("############开始下载############")
for url in urls: #设置要保存到的路路径
folderpath = store_path
#通过函数返回下载链接
url_download = getinfo(url)
#开始下载
#调用保存文件函数,实现下载到本地
download_file(url_download, folderpath, file_name_num, file_name)
#休眠1秒 防止访问速度过快
time.sleep(1)
#全部下载完成后输出信息
print("############全部下载完成############")

3.保存到本地,批量命名

#下载文件的方法
def download_file(url,folderpath,num,file_name): #参数中 folderpath 为要保存的文件夹的路径 num 为文件编号
#文件夹不存在则创建文件夹
folder = os.path.exists(folderpath)
if not folder:
os.makedirs(folderpath)
#输出保存信息
print('---正在下载第' + str(num) + '集>>>>>', folderpath+'/'+file_name+'-'+str(num)+'.mp3')
#请求资源链接 读取远程MP3资源
res = requests.get(url)
res.raise_for_status() #设置保存的文件名
filename = os.path.basename(file_name+'-'+str(num)+'.mp3')
file_path = os.path.join(folderpath, filename)
#保存到本地
mp3_file = open(file_path, 'wb')
for chunk in res.iter_content(chunk_size=1000000):
mp3_file.write(chunk)
mp3_file.close()
#每集下载完成后 输出提示
print(' ***第'+str(num)+'集下载成功') #修改文件编号 加 1
global file_name_num
file_name_num+=1

4.界面设计

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#界面库使用 tkinter
import tkinter
from tkinter import *
import next #==next文件为1-3中函数保存的位置 root = tkinter.Tk() # 创建窗口对象的背景色
root.title("听书爬虫程序")
root.geometry("450x350") L1 = Label(root, text="小说名字:(如:****)")
L1.pack( side = TOP)
E1 = Entry(root, bd =1, width='50')
E1.pack(side = TOP) L2 = Label(root, text="保存路径:(如:D:/****)")
L2.pack( side = TOP)
E2 = Entry(root, bd =1, width='50')
E2.insert(0, "D:/")
E2.pack(side = TOP) L3 = Label(root, text="小说网址:(如:https://www.qktsw.net/ting-book-play-5264-1-1.shtml)")
L3.pack( side = TOP)
E3 = Entry(root, bd =1, width='50')
E3.pack(side = TOP) L4 = Label(root, text="起始集数:(如:1)")
L4.pack( side = TOP)
E4 = Entry(root, bd =1, width='50')
E4.pack(side = TOP) L5 = Label(root, text="终止集数:(如:67)")
L5.pack( side = TOP)
E5 = Entry(root, bd =1, width='50')
E5.pack(side = TOP) L6 = Label(root,text="作者:***",fg="red")
L6.pack( side = BOTTOM)
#
E7 = Entry(root, bd =1, width='50')
E7.insert(0, 'https://www.qktsw.net/') #在文本框开始位置插入“内容一”
E7.pack(side = BOTTOM)
L7 = Label(root, text="网址备忘:(复制后用浏览器打开)")
L7.pack( side = BOTTOM)
#信息输入完成后 确认键调用的函数
def on():
#获取各个输入框的内用
name = E1.get()
path = E2.get()
wangzhi = E3.get()
begin = E4.get()
end = E5.get()
#传递参数
next.onclick(name,path,wangzhi,begin,end) B = tkinter.Button(root, text="确认", height="1", command=on, width='50')
B.pack(side=TOP) root.mainloop() # 进入消息循环

5.效果展示

2019-04-23-Python爬取有声小说的更多相关文章

  1. python 爬取网络小说 清洗 并下载至txt文件

    什么是爬虫 网络爬虫,也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人.其目的一般为编纂网络索引. 网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对其他网站的索引.网络爬虫可以 ...

  2. Python的scrapy之爬取顶点小说网的所有小说

    闲来无事用Python的scrapy框架练练手,爬取顶点小说网的所有小说的详细信息. 看一下网页的构造: tr标签里面的 td 使我们所要爬取的信息 下面是我们要爬取的二级页面 小说的简介信息: 下面 ...

  3. 如何用python爬虫从爬取一章小说到爬取全站小说

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  4. python入门学习之Python爬取最新笔趣阁小说

    Python爬取新笔趣阁小说,并保存到TXT文件中      我写的这篇文章,是利用Python爬取小说编写的程序,这是我学习Python爬虫当中自己独立写的第一个程序,中途也遇到了一些困难,但是最后 ...

  5. Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP

    自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...

  6. Python爬取招聘信息,并且存储到MySQL数据库中

    前面一篇文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为前一天的,同时将爬取的内容保存到数据库中:这篇文章主要讲述如何将python文件压缩成exe可执行文件,供后面的操作. 这系列文章 ...

  7. 利用python爬取58同城简历数据

    利用python爬取58同城简历数据 利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用pyth ...

  8. python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:简单 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...

  9. steam夏日促销悄然开始,用Python爬取排行榜上的游戏打折信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 不知不觉,一年一度如火如荼的steam夏日促销悄然开始了.每年通过大大小小 ...

随机推荐

  1. STL map 详细用法

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值)的数据 处理能力. 需要的库 #include <map> ...

  2. Dubbo源码学习之-Adaptive自适应扩展

    前言 最近三周基本处于9-10-6与9-10-7之间,忙碌的节奏机会丢失了自己.除了之前干施工的那段经历,只看参加软件开发以来,前段时间是最繁忙的了.忙的原因,不是要完成的工作量大,而是各种环境问题, ...

  3. JDK的命令行工具系列 (二) javap、jinfo、jmap

    javap: 反编译工具, 可用来查看java编译器生成的字节码 参数摘要: -help 帮助 -l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出publ ...

  4. 从原理层面掌握HandlerMethod、InvocableHandlerMethod、ServletInvocableHandlerMethod的使用【一起学Spring MVC】

    每篇一句 想当火影的人没有近道可寻,当上火影的人同样无路可退 前言 HandlerMethod它作为Spring MVC的非公开API,可能绝大多数小伙伴都对它比较陌生,但我相信你对它又不是那么的生疏 ...

  5. Java匹马行天下之J2EE框架开发——Spring—>用IDEA开发Spring程序(01)

    一.心动不如行动 一.创建项目 *注:在IDEA中我创建的Maven项目,不了解Maven的朋友可以看我之前的博客“我们一起走进Maven——知己知彼”,了解Maven后可以看我之前的博客“Maven ...

  6. Activiti6系列(1)- 核心数据库表及字段注释说明

    前言 本文是根据<疯狂工作流讲义-Activiti6.0>一书中提取过来的,有兴趣的可以去当当网买这本书,讲的很不错,最后还有实战案例. 虽然是提取过来的,但完全靠手打梳理,觉得有用的小伙 ...

  7. vue过滤器的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 全世界仅有的唯一最高LINUX版本的白菜路由,支持NAND记

    在上上篇 真千兆路由的极限之OPENWRT MAKE, 某品牌白菜价QCA9558/QCA9880/QCA8337N纯种组合OS搭建时记 里,有没有还记否之模式退一步,海阔天空 回到了远古时代的ar7 ...

  9. 【模板】zkw线段树

    题意简述 已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 代码 #include <cstdio> using namespace std; in ...

  10. 7.4 元组tuple类型内置方法

    元组tuple 元组相当于不可变的列表,在定义完成后后面就不可以进行更改,因此元组只可取不可存 因为不可变,所以相对列表来说,他的功能也少了很多,所以,不难理解,他有个优点就是占用内存小. 作用:能够 ...