Python爬取有声小说


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

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

摘要

功能如下:

1.批量下载

2.批量命名

3.界面化显示

使用工具:

1.pycharm

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

整体思路:

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

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

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

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

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

1.获取下载链接

  1. #获取下载链接的方法
  2. def getinfo(url0):
  3. #请求头
  4. headers = {
  5. "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"
  6. }
  7. #请求网页数据
  8. req = requests.get(url=url0, headers=headers)
  9. req.encoding = 'gb2312'
  10. html = req.text
  11. # 通过正则查找下载链接
  12. res = re.findall(r"http://(.*).m4a", html)
  13. # 拼合链接
  14. res = 'http://' + res[0]+'.m4a'
  15. #print(res)
  16. return res

2.分析规律,循环爬取

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

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

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

4.界面设计

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. #界面库使用 tkinter
  4. import tkinter
  5. from tkinter import *
  6. import next #==next文件为1-3中函数保存的位置
  7. root = tkinter.Tk() # 创建窗口对象的背景色
  8. root.title("听书爬虫程序")
  9. root.geometry("450x350")
  10. L1 = Label(root, text="小说名字:(如:****)")
  11. L1.pack( side = TOP)
  12. E1 = Entry(root, bd =1, width='50')
  13. E1.pack(side = TOP)
  14. L2 = Label(root, text="保存路径:(如:D:/****)")
  15. L2.pack( side = TOP)
  16. E2 = Entry(root, bd =1, width='50')
  17. E2.insert(0, "D:/")
  18. E2.pack(side = TOP)
  19. L3 = Label(root, text="小说网址:(如:https://www.qktsw.net/ting-book-play-5264-1-1.shtml)")
  20. L3.pack( side = TOP)
  21. E3 = Entry(root, bd =1, width='50')
  22. E3.pack(side = TOP)
  23. L4 = Label(root, text="起始集数:(如:1)")
  24. L4.pack( side = TOP)
  25. E4 = Entry(root, bd =1, width='50')
  26. E4.pack(side = TOP)
  27. L5 = Label(root, text="终止集数:(如:67)")
  28. L5.pack( side = TOP)
  29. E5 = Entry(root, bd =1, width='50')
  30. E5.pack(side = TOP)
  31. L6 = Label(root,text="作者:***",fg="red")
  32. L6.pack( side = BOTTOM)
  33. #
  34. E7 = Entry(root, bd =1, width='50')
  35. E7.insert(0, 'https://www.qktsw.net/') #在文本框开始位置插入“内容一”
  36. E7.pack(side = BOTTOM)
  37. L7 = Label(root, text="网址备忘:(复制后用浏览器打开)")
  38. L7.pack( side = BOTTOM)
  39. #信息输入完成后 确认键调用的函数
  40. def on():
  41. #获取各个输入框的内用
  42. name = E1.get()
  43. path = E2.get()
  44. wangzhi = E3.get()
  45. begin = E4.get()
  46. end = E5.get()
  47. #传递参数
  48. next.onclick(name,path,wangzhi,begin,end)
  49. B = tkinter.Button(root, text="确认", height="1", command=on, width='50')
  50. B.pack(side=TOP)
  51. 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. asn1学习笔记 约束

    继续看asn1语法详解,今天主要看了约束部分,包含 1.单值约束,包含枚举类型 enumerated . 如: Two ::= INTEGER(2) Day ::= ENUMERATED { mond ...

  2. android 界面提示框架WisdomProgressHUD,为金典而生

    一:简述 今天给android开发者们,推荐一个金典的界面提示框架WisdomProgressHUD,使用简洁方便. WisdomProgressHUD 是一个半透明的 HUD 指示器. Wisdom ...

  3. python post接口测试第一个用例日记

    如下是我自己公司的一个请求,学习过程顺便记录下,都是白话语言,不那么专业,不喜勿喷! 首先看下图,post请求一般需要填写参数url, data(一般是表格类型的参数,如我们智联驾驶APP登录的参数) ...

  4. 【iOS】Error: Error Domain=PBErrorDomain Code=7 "Cannot connect to pasteboard server

    这几天在用 Swift 开发一个简单的键盘扩展,真机调试时遇到了这个问题,详细信息如下: ***[:] Could not save pasteboard named com.apple.UIKit. ...

  5. 简易数据分析 08 | Web Scraper 翻页——点击「更多按钮」翻页

    这是简易数据分析系列的第 8 篇文章. 我们在Web Scraper 翻页--控制链接批量抓取数据一文中,介绍了控制网页链接批量抓取数据的办法. 但是你在预览一些网站时,会发现随着网页的下拉,你需要点 ...

  6. 你所不知道的 CSS 负值技巧与细节

    写本文的起因是,一天在群里有同学说误打误撞下,使用负的 outline-offset 实现了加号.嗯?好奇的我马上也动手尝试了下,到底是如何使用负的 outline-offset 实现加号呢? 使用负 ...

  7. oracle 正确删除归档日志,并清除 V$ARCHIVED_LOG 数据

    1. 连接 RMAN 管理 rman target / 2. 查看归档日志列表 RMAN> crosscheck archivelog all; 3. 删除所有归档日志 RMAN> DEL ...

  8. Linux(Ubuntu)安装Swift和Swiftlint

    很多时候iOS开发完毕需要接入CI中,而很多CI是基于Linux的,需要在Linux平台安装Swift和Swiftlint,下面就是针对这两个软件的安装步骤. Swift安装 环境 系统:Ubuntu ...

  9. 基于hprose-golang创建RPC微服务

    Hprose(High Performance Remote Object Service Engine) 是一款先进的轻量级.跨语言.跨平台.无侵入式.高性能动态远程对象调用引擎库.它不仅简单易用, ...

  10. 神奇的 SQL 之温柔的陷阱 → 三值逻辑 与 NULL !

    前言 开心一刻   一个中国小孩参加国外的脱口秀节目,因为语言不通,于是找了一个翻译. 主持人问:“Who is your favorite singer ?” 翻译:”你最喜欢哪个歌手啊 ?” 小孩 ...