Python实现小说下载器,可以打包exe
创始人
2024-03-27 14:40:59
0

前言

闲的无聊,现在没得什么好剧追(你们或许可以给我推荐推荐)

朋友都在看小说,那我就来用Python搞一个小说下载器吧

顺便打包一下

实现步骤

爬虫基本四个步骤:

采集一章小说内容

  1. 发送请求, 模拟浏览器对于url地址发送请求
    小说章节链接:
https://***不屏蔽不给过.com/book/5613/4217210.html
  1. 获取数据, 获取网页源代码

  2. 解析数据, 提取我们想要的数据内容

    小说章节名
    小说内容

  3. 保存数据, 把小说内容本地文件 txt

实现代码

导入数据请求模块

源码.点击领取即可

import requests

导入数据解析模块

import parsel

导入正则

import re

# 导入格式化打印

import prettytable as pt

导入进度条

from tqdm import tqdm

请求头 字典数据类型, 构建完整键值对

headers = {# user-agent 用户代理 表示浏览器基本身份信息'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}def get_response(html_url):
  • 发送请求, 模拟浏览器对于url地址发送请求
python学习交流Q群:309488165 ### 源码领取自定义函数:def 关键字 定义函数get_response 函数名 自定义html_url 形式参数:param html_url: 给个网址就可以了:return:response 返回响应对象模拟浏览器对于url地址发送请求headers 请求头 --> 可以直接复制粘贴"""# 发送请求response = requests.get(url=html_url, headers=headers)# return 关键字 返回 response 响应对象#  响应对象 表示请求成功return response
  • 获取小说名字 / 小说章节url
def get_novel_info(novel_url):"""获取小说名字 / 小说章节url:param novel_url: 小说目录页url地址:return:"""# 发送请求, 获取网页源代码html_data = get_response(html_url=novel_url).text# 把获取下来 html字符串数据 , 转成可解析对象selector = parsel.Selector(html_data)# 提取小说名字name = selector.css('.novel_info_title h1::text').get()# 提取小说章节url  attr 属性选择器, 提取标签里面属性内容link_list = selector.css('.chapter_list a::attr(href)').getall()# https://ssbiqu.com/book/5613/4217210.html  列表推导式link_list = ['https://ssbiqu.com' + i for i in link_list]return name, link_list
  • 获取小说内容函数
def get_content(html_url):获取小说内容函数:param html_url: 形参 传入小说章节url地址:return: 章节名 / 小说内容"""# 调用前面定义好的发送请求函数response = get_response(html_url=html_url)# 获取网页源代码, html字符串数据# print(response.text)

解析提取, 小说章节名, 以及小说内容

       - 根据标签属性提取数据内容1. 小说章节名字 .style_h1 定位标签get() 获取第一个标签内容 相当于获取一个, 返回字符串getall() 获取所有标签内容, 返回列表

把获取下来

html字符串数据 , 转成可解析对象

selector = parsel.Selector(response.text)

提取标题

title = selector.css('.style_h1::text').get()

提取内容

content_list = selector.css('#article>p::text').getall()

保存文字, 保存字符串数据

所有要把 列表转成字符串数据类型

列表转成字符串数据类型?for 遍历提取列表里面元素str 强制转换数据类型str.join() 把列表合并为字符串'\n'.join(content_list) 以换行符, 把列表里面元素一个一个合并起来变成一个字符串"""content = '\n'.join(content_list)

返回标题, 小说内容

return title, content

保存函数

def save(name, title, content):"""保存函数:param title: 小说章节名:param content: 小说内容:return:"""# # replace 字符串替换, 把 / 替换成 -# title = title.replace('/', '-')  保存 a 追加 w 写入会覆盖with open(name + '.txt', mode='a', encoding='utf-8') as f:f.write(title)f.write('\n')f.write(content)f.write('\n')

搜索函数

def search(word):"""搜索函数:param word: 小说名:return:"""search_url = 'https://ssbiqu.com/search/'data = {'searchkey': word}search_data = requests.post(url=search_url, data=data, headers=headers).textnovel_id_list = re.findall('', search_data)name_list = re.findall('

(.*?)(.*?)(.*?)

', search_data)name_list = [''.join(j) for j in name_list]# 仅匹配中文writer_list = re.findall(' .*?(.*?)  ', search_data)writer_list = [z.replace('', '').replace('', '') for z in writer_list]tb = pt.PrettyTable()tb.field_names = ['序号', '书名', '作者', '书ID']page = 0novel_info_list = []for novel_id, name, writer in zip(novel_id_list, name_list, writer_list):dit = {'书名': name,'作者': writer,'书ID': novel_id,'信息': '系统课程报名加婧琪老师微信: python1018'}print(dit)novel_info_list.append(dit)tb.add_row([page, name, writer, novel_id])page += 1print(tb)num = input('请输入你想要下载小说序号: ')novel = novel_info_list[int(num)]['书ID']return novel

获取小说名字

ef main(word):"""主函数:return:"""novel_id = search(word)# 小说目录页 https://ssbiqu.com/book/5613/url = f'https://ssbiqu.com/book/{novel_id}/'# 获取小说名字name, link_list = get_novel_info(novel_url=url)# for循环遍历 提取内容for link in tqdm(link_list):# 获取小说内容title, content = get_content(html_url=link)save(name, title, content)

最后

今天的分享到这里就结束了

顺便给大家推荐一些Python视频教程,希望对大家有所帮助:

Python零基础教学合集

对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

相关内容

热门资讯

原创 民... 如今,律师这个职业在社会上的口碑并不特别好,主要原因是有些律师缺乏正义感。在律师圈里,有一些知名律师...
为促进民用航空事业高质量发展提... 法治日报全媒体记者 蒲晓磊 2025年12月27日,十四届全国人大常委会第十九次会议表决通过新修订的...
宁夏:严惩恶意欠薪违法犯罪 维... 原标题:严惩恶意欠薪违法犯罪 维护劳动者合法权益(主题) 宁夏:部署开展治理欠薪冬季专项行动(副题)...
镇江长江锚地纠纷,“枫警” 联... 现场 扬子晚报网12月27日讯(通讯员 滕超 记者 姜天圣)12月27日上午,长江镇江段定易洲锚地,...
原创 七... 他的名字叫余海水,虽然年已77岁,但他多次凭借聪明才智,在监狱里巧妙地演绎了一出又一出的障眼法。尽管...
玉泉区十大继承律师排名推荐:张... 在呼和浩特玉泉区的法律服务领域,继承纠纷往往牵涉复杂的情感纠葛与财产分配难题。当亲情与利益交织,一位...
笔架山街道联动多方力量调处纠纷 本报记者 范天娇 本报通讯员 闫大平 王文宗 “多亏了街道的调解团队,小区停车难的问题这么快就解决了...
原创 高... 日本媒体近日透露,首相高市早苗可能会在12月26日参拜靖国神社。这个日期的选择非常微妙,一方面避开了...
财政部:2026年继续实施更加... 全国财政工作会议12月27日至28日在北京召开。会议指出,2026年继续实施更加积极的财政政策。一是...
政策调整背后的思考:当科技奖励... 作为一名关注地方政策与企业发展自媒体博主,近期注意到葫芦岛市总工会此前发布的《支持科技型中小微企业发...