• 【python】采集**本子,不要看了,快进来~


    前言

    大家早好、午好、晚好吖~

    相信不少小伙伴都知道这个网站,特别是中二期得时候

    博主我就看过,哈哈哈哈

    今天我的得目的就是这个,咋来采集一下它

    代码展示

    # 导入数据请求模块 --> 第三方模块 需要 pip install requests 
    import requests
    # 导入数据解析模块 --> 第三方模块 需要 pip install parsel
    import parsel
    # 导入正则模块 --> 内置模块 不需要安装
    import re
    from show import get_content
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    请求目录页url <复制>

    本文只是大致展示,完整代码和视频教程点击下方蓝字

    点击 蓝色字体 自取,我都放在这里了。

    模拟浏览器对于 本子 目录页面url地址 发送请求

    模拟浏览器 headers 请求头 字典数据类型 <复制>

    headers = {
        # Cookie 用户信息, 检测是否有登陆账号 <登陆与否都是有cookie>
        'Cookie': '',
        # User-Agent 用户代理 表示浏览器基本身份信息
        'User-Agent': ''
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    发送请求

    requests模块 get模块里面方法

    response = requests.get(url=url, headers=headers)
    print(response)
    
    • 1
    • 2

    表示请求成功

    “”"
    2. 获取数据: 获取服务器返回响应数据

    开发者工具 --> response

    • response.text 获取响应文本数据 网页源代码

    3. 解析数据: 提取我们想要数据内容

    提取本子名字 / 本子章节标题 / 本子章节url

    解析数据方法:

    • xpath

    • css

    • re: 对于字符串数据直接提取的话

    • css选择器: 根据标签属性提取数据内容

    转换数据类型

    获取下来 response.text html字符串数据类型

    get() 获取一个 返回字符串
    getall() 获取多个 返回列表
    “”"

    转换数据类型, 可解析对象

    selector = parsel.Selector(response.text)
    
    • 1

    提取本子名字

    name = selector.css('#novelName::text').get()
    
    • 1

    提取本子章节名字

    titles = selector.css('.DivTd a::text').getall()
    
    • 1

    提取本子章节url

    href = selector.css('.DivTd a::attr(href)').getall()
    
    • 1

    for循环遍历, 把列表里面元素一个一个提取出来

    for link, title in list(zip(href, titles))[58:]:
        # https://b.faloo.com/631781_1.html
        link_url = 'https:' + link
        print(link_url, title)
    
    • 1
    • 2
    • 3
    • 4

    “”"
    4 / 5 发送请求, 获取数据
    “”"

        html_data = requests.get(url=link_url, headers=headers).text
    
    • 1

    通过css提取数据 转换数据 可解析对象

        selector_1 = parsel.Selector(html_data)
    
    • 1

    提取本子内容

        content_list = selector_1.css('.noveContent p::text').getall()
        # join 是干嘛的?
        content = '\n'.join(content_list)
    
    • 1
    • 2
    • 3

    len() 统计元素个数 如果是付费章节, 里面数据只有

        if len(content) < 30:
    
    • 1

    “”"
    关于某本子网站VIP章节内容 —> 图片形式

    1. 从章节url里面获取图片请求参数

    2. 保存图片二进制数据

    3. 通过百度云API接口 做一个文字识别, 读取图片的文字内容

    4. 保存数据

    re.findall(‘匹配什么数据’, ‘从什么地方匹配’) 找到所有我们想要数据内容

    从什么地方 去匹配什么数据

    html_data 里面 去匹配 image_do3\((.*?)\) 其中 (.*?) 表示我们想要数据内容

    - \ 转义字符, 把含有特殊含义字符, 转成除了本身字符以外不含有任何其他的意思

    () 在正则里面表示精确匹配

    • 批量替换
      1. 选中替换内容 ctrl + R

      2. 勾选上 .* 正则

      3. 输入正则命令匹配数据替换

    (.*?): (.*)
    '$1': '$2',
    
    • 1
    • 2

    “”"

    通过正则匹配请求参数

            info = re.findall('image_do3\((.*?)\)', html_data)[0].split(',')
    
    • 1

    本文只是大致展示,完整代码和视频教程点击下方蓝字

    点击 蓝色字体 自取,我都放在这里了。

            print(info)
            data = {
                'num': '0',
                'o': '3',
                'id': '631781',
                'n': info[3],
                'ct': '1',
                'en': info[4],
                't': '0',
                'font_size': '16',
                'font_color': '666666',
                'FontFamilyType': '1',
                'backgroundtype': '0',
                'u': '15576696742',
                'time': '',
                'k': info[6].replace("'", ''),
            }
            print(info[6].replace("'", ''))
            print(info[6].replace('"', ''))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    发送请求获取图片二进制数据

            img_content = requests.get(url=vip_url, params=data, headers=headers).content
            content = get_content(img_content)
    
    • 1
    • 2

    7. 保存本子内容

        with open(name + '.txt', mode='a', encoding='utf-8') as f:
            """
            第一章 章节名
                小说内容
            第二章 章节名
                小说内容
            """
            # 写入章节名
            f.write(title)
            # 回车 换一行
            f.write('\n')
            # 写入小说内容
            f.write(content)
            # 回车 换一行
            f.write('\n')
        print(content)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    效果展示


    文章看不懂,我专门录了对应的视频讲解,本文只是大致展示,完整代码和视频教程点击下方蓝字

    点击 蓝色字体 自取,我都放在这里了。

    宁外给大家推荐一个好的教程:
    【48小时搞定全套教程!你和大佬只有一步之遥【python教程】

    尾语 💝

    好了,我的这篇文章写到这里就结束啦!

    有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

    喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

    请添加图片描述

  • 相关阅读:
    使用 PyTorch 的计算机视觉简介 (5/6)
    架构篇(五)可扩展架构
    maven下载jar包失败如何配置国内源(手把手)
    我的Go并发之旅、01 并发哲学与并发原语
    Nacos源码系列—关于服务注册的那些事
    死锁详细解读
    轻松实现文件改名:让新文件名与目录名称一致
    请问怎么编程菜单和好多东西学校都没教
    【MySQL】索引和事物
    Java面试题:通过实例说明工厂模式和抽象工厂模式的用法,以及它们在解耦中的作用
  • 原文地址:https://blog.csdn.net/weixin_62853513/article/details/127710613