Python实现番茄小说内容下载

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

环境使用:

  • Python 3.8

  • Pycharm

模块使用:

  • requests --> pip install requests

  • re

  • parsel

代码展示:

导入模块

# 导入数据请求模块
import requests
# 导入正则表达式模块
import re
# 导入数据解析模块
import parsel
from prettytable import PrettyTable
from tqdm import tqdm

模拟浏览器

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
while True:
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
    }
    """实现搜索下载功能"""
    key = input('请输入你要下载的小说: 输入00退出 ')
    if key == '00':
        break
    tb = PrettyTable()
    tb.field_names = ['序号', '书名', '作者', '类型', '最新章节', 'ID']
    num = 0
    info = []
    print('正在检索中, 请稍后.....')
    for page in tqdm(range(30)):
    
        search_url = 'https://fanqienovel.com/api/author/search/search_book/v1'
        # 请求参数
        search_params = {
            'filter': '127,127,127,127',
            'page_count': '10',
            'page_index': page,
            'query_type': '0',
            'query_word': key,
        }
        # 发送请求
        search_data = requests.get(url=search_url, params=search_params, headers=headers).json()
        for i in search_data['data']['search_book_data_list']:
            book_name = i['book_name']
            author = i['author']
            book_id = i['book_id']
            category = i['category']
            last_chapter_title = i['last_chapter_title']
            dit = {
                'book_name': book_name,
                'author': author,
                'category': category,
                'last_chapter_title': last_chapter_title,
                'book_id': book_id,
            }
            info.append(dit)
            tb.add_row([num, book_name, author, category, last_chapter_title, book_id])
            num += 1

    print(tb)
    book = input('请输入你要下载小说序号: ')
"""获取小说名字以及章节ID"""
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
    # 请求链接
    url = f'https://fanqienovel.com/page/{info[int(book)]["book_id"]}'
    # 发送请求
    response = requests.get(url=url, headers=headers)
    # 获取网页源代码  html字符串数据
    html_data = response.text
    # 正则提取小说名
    name = re.findall('<div class="info-name"><h1>(.*?)</h1', html_data)[0]
    # 把获取到html字符串数据,转成可解析对象
    selector = parsel.Selector(html_data)
    # css选择器提取小说名
    css_name = selector.css('.info-name h1::text').get()
    # 提取章节ID
    href = selector.css('.chapter-item a::attr(href)').getall()
    print(f'{name}, 小说正在下载, 请稍后....')
    # for循环遍历提取列表里面元素
    for index in tqdm(href):
        # 字符串分割提取ID -> 列表
        chapter_id = index.split('/')[-1]
        # 构建小说数据链接地址
        link = f'https://novel.snssdk.com/api/novel/book/reader/full/v1/?device_platform=android&parent_enterfrom=novel_channel_search.tab.&aid=2329&platform_id=1&group_id={chapter_id}&item_id={chapter_id}'
        # 对于内容链接地址发送请求, 获取数据
        json_data = requests.get(url=link, headers=headers).json()['data']['content']
        # 提取章节标题名
        title = re.findall('<div class="tt-title">(.*?)</div>', json_data)[0]
        # 提取小说内容 -> 列表合并成字符串
        content = '\n'.join(re.findall('<p>(.*?)</p>', json_data))
        # 保存小说内容
        with open(f'{name}.txt', mode='a', encoding='utf-8') as f:
            """
            第一章 章节名
            小说内容
            第二章 章节名
            小说内容
            """
            f.write(title)
            f.write('\n')
            f.write(content)
            f.write('\n')
"""
解析数据方法:
    re: 直接对于字符串数据进行解析提取
        - re.findall()
            返回列表
    css: 根据标签属性提取数据
        - 找到对应数据标签位置
            .info-name h1 -> 定位class类名为info-name下面h1标签
    xpath: 根据标签节点提取数据
        xpath_name = selector.xpath('//*[@class="info-name"]/h1/text()').get()
"""

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦

希望本篇文章有对你带来帮助 ,有学习到一点知识~

躲起来的星星也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~更多源码、资料、素材、解答、交流皆点击下方名片获取呀

你可能感兴趣的:(爬虫,python,开发语言,pycharm,爬虫)