当前位置:   article > 正文

python爬取有声小说_2019-04-23-Python爬取有声小说

爬取有声小说代码

Python爬取有声小说

[toc] 通过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.效果展示

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/900046
推荐阅读
相关标签
  

闽ICP备14008679号