前言 嗨喽!这里是魔王,欢迎来到这篇文章。小说想必大家非常熟悉, 无论上班、在家还是干什么只要空闲,许多人都会看看小说让自己的精神世界解解馋!但是有时候叭,没钱!流量贵!免费看书软件一大堆广告!又是一大难题,哎!生活!那么今天我就为大家带来一个好案例!用python制作爬取小说下载器!
案例:
Python实现全网小说下载器
- python 3.8
- pycharm
requests >>> 数据请求模块 pip install requests parsel >>> 数据解析模块 pip install parsel >>> 这个模块不支持 3.9,最好是3.8或3.6
安装方法win + R 输入 cmd 然后点击确定 在输入 安装命令 如果出现红色报错, 网络连接超时 是需要切换国内的镜像源 黄色是警告 提示你可以更新pip版本
如果爬取的是小说内容
– 小试牛刀 爬取一章小说 – 爬取一本小说内容 – 搜索小说名字 然后就可以下载相应的小说内容
如果你想要的通过Python代码取进行下载小说
– 如何获取这些数据内容 >>> 小说章节标题 以及 小说内容 (用Python代码模拟浏览器 发送请求) – 弄一个下载进度条显示 – 控制爬取的速度 就不会爬蹦
爬虫基本步骤- 发送请求
- 获取数据
- 解析数据, 目标 获取 小说章节标题 以及 小说内容
def get_response(html_url): response = requests.get(html_url) return response二. 获取所有章节url地址
def get_novel_url(html_url): response = get_response(html_url) selector = parsel.Selector(response.text) href = selector.css('#list dd a::attr(href)').getall() return href
三. 获取小说的内容
def get_novel_content(html_url): response = get_response(html_url) selector = parsel.Selector(response.text) # 才可以调用 selector 对象里面 css选择器方法 进行解析提取数据
title = selector.css('.bookname h1::text').get() # 这个是获取一个 小说章节标题
content_list = selector.css('#content::text').getall() # 获取所有
content = '\n'.join(content_list) # 小说内容
novel_content = [title, content] return novel_content
四. 保存数据
def save(name, title, content): with open(name + '.txt', mode='a', encoding='utf-8') as f: f.write(title) f.write('\n') f.write(content) f.write('\n')
五. 主函数 整合所有函数内容
def main(html_url): response_1 = get_response(html_url) selector = parsel.Selector(response_1.text) # 才可以调用 selector 对象里面 css选择器方法 进行解析提取数据
name = selector.css('#info h1::text').get() # 这个是获取一个 小说章节标题
href = get_novel_url(html_url) # 调用了获取小说章节url地址的函数 for index in tqdm(href): index_url = 'https://www.biqugee.com' + index
novel_content = get_novel_content(index_url) # 调用了获取小说内容函数 save(name, novel_content[0], novel_content[1]) # 调用了 保存函数
六. 制作下载器
if __name__ == '__main__': key_world = input('请输入你要下载的小说名字: ') search_url = f'https://www.biqugee.com/search.php?q={key_world}' response_1 = get_response(html_url=search_url) select = parsel.Selector(response_1.text) divs = select.css('div.result-game-item-detail') lis = [] if divs: for div in divs: novel_url = div.css('.result-item-title a::attr(href)').get().split('/')[-2] novel_name = div.css('.result-item-title a::attr(title)').get() author = div.css('.result-game-item-info p:nth-child(1) span:nth-child(2)::text').get() dit = { '小说名字': novel_name, '作者': author, '书ID': novel_url, } lis.append(dit) search_result = pd.DataFrame(lis) print(f'搜索到{len(search_result)}条数据内容, 结果如下: ') print(search_result) novel_num = input('请输入你要下载的小说序号: ') novel_id = lis[int(novel_num)]['书ID'] url = f'https://www.biqugee.com/book/{novel_id}/' main(url) else: print('重新输入内容')
七. 最终效果
