使用python实现小说搜索书名作者名选择下载封装

 

1. 模块的使用:

 
   - `requests` 模块用于发起HTTP请求并获取响应。
   - `parsel` 模块用于数据解析,通常用于解析网页内容。
   - `tqdm` 模块用于显示进度条,可以在循环中显示任务的完成进度。
   - `PrettyTable` 模块用于创建漂亮的表格,可以用于显示数据。 

2. 基本流程的实现:


   - 明确需求:确保清楚了解需要实现的功能和流程。
   - 抓包分析:通过抓包工具分析网站的请求和响应,以便了解数据的结构和请求方式。
   - 发送请求:使用 `requests` 模块发送HTTP请求获取数据。
   - 获取数据:从响应中获取需要的数据。
   - 解析数据:使用 `parsel` 模块对获取的数据进行解析。
   - 存储数据:将解析后的数据存储到文件或数据库中。

3. 函数的使用:


   - 定义函数来封装特定功能,使代码结构清晰和模块化。
   - 函数包括发送请求函数 `GetResponse(url)`、获取小说章节内容函数 `GetContent(link)`、保存小说内容函数 `Save(name, title, content)`、获取小说信息函数 `GetInfo(NovelID)` 和搜索小说函数 `Search(key)`。

4. 交互性编程:


   - 使用 `if __name__ == '__main__':` 部分可以使代码在被直接运行时执行一些特定的操作,如接收用户输入、调用函数等。

通过整理和编写Python脚本,您展示了对数据请求、解析和交互编程的理解和应用。这些知识点对于开发网络爬虫、数据获取和处理等任务都非常重要。如果您想了解更多细节或有其他问题,请随时告诉我。我很乐意继续帮助您。

实现效果:

 

代码:

"""
模块使用
    1.requests 数据请求
    2.parsel 数据解析
    3.prettytable 指表模块
    4.tqdm 进度条模块
小说网址:https://www.heenee.com/

1.采集单章小说
2.采集正本小说
2.实现搜索下载功能 / 打包成exe软件
    找到搜索接口(书名/作者/id)

实现基本流程
    1.明确需求
    1.1 抓包分析
    2.发送请求
    3.获取数据
    4.解析数据
    5.存储数据
"""
# 导入数据请求模块
import requests
# 导入数据解析模块
import parsel
# 导入进度条模块
from tqdm import tqdm
# 导入建表模块
from prettytable import PrettyTable


def GetResponse(url):
    # 模拟浏览器
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
    }
    # 发送请求
    response = requests.get(url=url, headers=headers)
    # 返回内容
    return response


def GetContent(link):
    """获取小说内容单章"""
    # 小说章节链接地址
    # link = 'https://www.heenee.com/quanben/27/27066/16579246.html'
    # 调用发送请求
    response = GetResponse(url=link)
    # 获取数据内容
    html = response.text
    # 把获取到的html字符串数据 转成可解析对象
    selector = parsel.Selector(html)
    # 提取章节标题
    title = selector.css('#amain h1::text').get()  # 根据标签属性提取数据内容
    # 提取章节内容
    content_list = selector.css('#htmlContent p::text').getall()
    # 把列表合并成字符串
    content = '\n\n'.join(content_list)
    # 返回标题 和 内容
    # print(title)
    # print(content)
    return title, content


# 保存函数
def Save(name, title, content):
    with open(name + '.txt', mode='a', encoding='utf-8') as f:
        f.write(str(title))
        f.write('\n\n')
        f.write(content)
        f.write('\n\n')


def GetInfo(NovelID):
    # 获取小说名字,章节链接
    novel_url = F'https://www.heenee.com{NovelID}'
    # 发送请求
    novel_html = GetResponse(url=novel_url).text
    # 把获取到的html字符串数据 转成可解析对象
    selector = parsel.Selector(novel_html)
    # 提取小说名字
    name = selector.css('.bdsub h1::text').get().split(' ')[0]
    # 提取小说章节链接
    href = selector.css('.L a::attr(href)').getall()
    chapter_url_list = ['https://www.heenee.com/' + i for i in href]
    # print(name)
    # print(href)
    # print(chapter_url_list)
    return name, chapter_url_list


def Search(key):
    # 搜索接口
    search_url = f'https://www.heenee.com/api/search?q={key}'
    # 发送请求
    json_date=GetResponse(url=search_url).json()
    # 实例化对象
    tb = PrettyTable()
    # 添加字段名
    tb.field_names=['序号','书名','作者']
    page=0
    info_list=[]
    # 字典取值,键值对取值
    for index in json_date['data']['search']:
        dit={
            '书名':index['book_name'],
            '作者':index['author'],
            'ID':index['book_list_url'],
        }
        info_list.append(dit)
        # 添加每行数据
        tb.add_row([page,index['book_name'],index['author']])
        # 循环 序号加1
        page +=1
    print(tb)
    return info_list


if __name__ == '__main__':
    word=input('请输入你要下载的小说/作者:')
    info_list = Search(key=word)
    num = input('请输入你要下载的序号:')
    NoNovelID=info_list[int(num)]['ID']


    # 获取小说名字,章节链接
    name, chapter_url_list = GetInfo(NovelID=NoNovelID)
    print(f'正在采集{name},请等待。')
    for chapter_url in tqdm(chapter_url_list):
        # 调用获取章节标题/内容函数
        title, content = GetContent(link=chapter_url)
        # 保存数据
        Save(name, title, content)

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值