码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 调教kimi写一个小说爬虫的全过程


    User: 分析一下这个网页,写一段python代码,提取里面的章节文字
    https://www.52bqg.info/book_10587/

    Kimi: 根据提供的网页内容,我们可以看到网页的HTML结构中并没有直接提供章节内容。通常,章节内容可能位于与章节列表不同的页面上,每个章节标题链接到其对应的章节内容页面。

    在这个特定的例子中,我们可以看到有一个指向“第67章 后记”的链接,但是没有提供章节内容的直接文本。因此,我们需要访问每个章节的链接页面来获取其内容。

    以下是一个示例Python脚本,它演示了如何获取章节列表页面上的所有链接,并打印出每个章节标题和链接。请注意,这个脚本不会提取章节内容,因为它需要访问每个章节的独立页面来获取内容。这个脚本只是一个起点,你需要进一步编写代码来访问每个章节页面并提取文本。

    import requests
    from bs4 import BeautifulSoup
    
    # 网页URL
    CHAPTER_LIST_URL = 'https://www.52bqg.info/book_10587/'
    
    # 自定义请求头
    headers = {
       
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
    }
    
    def get_chapter_links(chapter_list_url, headers):
        response = requests.get(chapter_list_url, headers=headers)
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 查找所有章节链接,这里需要根据实际页面结构调整选择器
        chapter_links = soup.find_all('a', href=True)
        chapters = []
        for link in chapter_links:
            chapters.append((link.text.strip(), link['href']))
        return chapters
    
    def main():
        chapters = get_chapter_links(CHAPTER_LIST_URL, headers)
        for title, url in chapters:
            print(f'章节标题: {
         title}')
            print(f'章节链接: {
         url}\n')
    
    if __name__ == "__main__":
        main()
    

    要提取章节内容,你需要访问每个章节的URL,然后解析返回的HTML以找到章节文本。这通常涉及到定位包含章节文本的HTML元素,并使用BeautifulSoup来提取文本。

    由于我无法直接访问外部链接或执行网络请求,你需要根据实际页面的结构来调整脚本,并自行运行它来提取章节内容。此外,请确保你遵守目标网站的使用条款和版权法。

    User: 章节标题都是“第x章”格式,从“第1章”开始提取,前面的丢弃,更改为用户输入URL

    Kimi: 基于您的要求,下面是一个Python脚本示例,该脚本将提示用户输入小说的章节列表页面URL,然后从该页面提取所有以“第x章”命名的章节标题和链接,并打印出来。此脚本假设每个章节标题都包含在标签内,并且遵循“第x章”的格式。

    import requests
    from bs4 import BeautifulSoup
    import re
    
    def get_chapter_links(chapter_list_url):
        response = requests.get(chapter_list_url)
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 查找所有章节链接
        chapter_links = soup.find_all('a', href=True)
        chapters = []
    
        # 正则表达式匹配“第x章”
        chapter_pattern = re.compile(r'第\d+章')
        
        for link in chapter_links:
            # 获取链接文本
            link_text = link.text.strip()
            # 如果链接文本符合章节标题的正则表达式
            if chapter_pattern.match(link_text):
                # 将章节标题和链接URL添加到列表
                chapters.append((link_text, chapter_list_url.rstrip('/') + link['href']))
        
        return chapters
    
    def main():
        # 用户输入小说的章节列表页面URL
        url = input("请输入小说的章节列表页面URL: ")
        
        # 获取章节链接
        chapters = get_chapter_links(url)
        
        # 打印章节标题和链接
        for title, url in chapters:
            print(f'章节标题: {
         title}')
            print(f'章节链接: {
         url}\n')
    
    if __name__ == "__main__":
        main()
    

    运行脚本后,它会请求用户输入章节列表页面的URL,然后输出所有章节的标题和链接。这个脚本使用了正则表达式第\d+章来匹配章节标题,其中\d+匹配一个或多个数字。

    请注意,这个脚本仅提取章节标题和链接,并不会下载章节内容。如果您需要下载章节内容,您需要进一步编写代码来访问每个章节的URL,并解析返回的HTML以找到章节文本。

    在使用此脚本之前,请确保您已经安装了requests和beautifulsoup4库。此外,请确保您遵守目标网站的使用条款和版权法。

    User: 很好,上面的代码已经提取了章节标题和链接,但是前面有些重复的部分,请将chapters中“第1章”之前的内容丢弃

    Kimi: 好的,为了避免提取“第1章”之前的内容,我们可以在将章节添加到chapters列表之前检查章节编号。以下是修改后的脚本,它将跳过“第1章”之前的所有章节:

    import requests
    from bs4 import BeautifulSoup
    import re
    
    def get_chapter_links(chapter_list_url):
        response = requests.get(chapter_list_url)
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 查找所有章节链接
        chapter_links = soup.find_all('a', href=True)
        chapters = []
    
        # 正则表达式匹配“第x章”
        chapter_pattern = re.compile(r'第(\d+)章')
        
        for link in chapter_links:
            # 获取链接文本
            link_text = link.text.strip()
            # 使用正则表达式搜索章节编号
            match = chapter_pattern.search(link_text)
            if match:
                # 检查章节编号是否为1或更高
                chapter_number = int(match.group(1))
                if chapter_number >= 1:
                    # 将章节标题和链接URL添加到列表
                    chapters.append((link_text, chapter_list_url.rstrip('/') + link['href']))
        
        return chapters
    
    def main():
        # 用户输入小说的章节列表页面URL
        url = input("请输入小说的章节列表页面URL: ")
        
        # 获取章节链接
        chapters = get_chapter_links(url)
        
        # 打印章节标题和链接
        for title, url in chapters:
            print(f'章节标题: {
         title}')
            print(f'章节链接: {
         url}\n')
    
    if __name__ == "__main__":
        main()
    

    在这个脚本中,我们使用正则表达式第(\d+)章来捕获章节编号,并将其作为一个组提取出来。然后,我们检查章节编号是否至少为1,确保我们不会提取“第1章”之前的任何内容。

    当用户运行脚本并输入章节列表页面的URL时,脚本将输出所有从“第1章”开始的章节标题和链接。

    请确保在使用此脚本之前已经安装了requests和beautifulsoup4库,并遵守目标网站的使用条款和版权法。

    User: 不是这样,我是想把chapters里面列表,移除“第1章”之前的元素

    Kimi: 明白了,如果您想从chapters列表中移除“第1章”之前的所有元素,您可以在将章节添加到列表之后,但在返回列表之前进行过滤。下面是修改后的脚本,它将在返回列表前移除“第1章”之前的所有章节:

    import requests
    from bs4 import BeautifulSoup
    import re
    
    def get_chapter_links(chapter_list_url):
        response = requests.get(chapter_list_url)
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 查找所有章节链接
        chapter_links = soup.find_all('a', href=True)
        chapters = []
    
        # 正则表达式匹配“第x章”
        chapter_pattern = re.compile(r'第(\d+)章')
        
        for link in chapter_links:
            # 获取链接文本
            link_text = link.text.strip()
            # 匹配章节编号
            match = chapter_pattern.search(link_text)
            if match:
                # 章节编号
                chapter_number = int(match.group(1))
                # 只添加“第1章”及之后的章节
                if chapter_number == 1 or (chapter_number > 1 and '第0章' not in link_text):
                    chapters.append((link_text, chapter_list_url.rstrip('/') + link['href']))
        
        # 过滤掉“第1章”之前的所有章节
        chapters = [chap for chap in chapters if '第0章' not in chap[0]]
        
        return chapters
    
    def main():
        # 用户输入小说的章节列表页面URL
        url = input("请输入小说的章节列表页面URL: ")
        
        # 获取章节链接
        chapters = get_chapter_links(url)
        
        # 打印章节标题和链接
        for title, url in chapters:
            print(f'章节标题: {
         title}')
            print(f'章节链接: {
         url}\n')
    
    if __name__ == "__main__":
        main()
    

    在这个脚本中,我们首先收集所有章节链接,然后通过列表推导式过滤掉“第1章”之前的所有章节。这里假设“第0章”或其他非正序章节编号表示在“第1章”之前的章节。如果章节编号不是这样命名的,您需要根据实际情况调整过滤逻辑。

    请确保在使用此脚本之前已经安装了requests和beautifulsoup4库,并遵守目标网站的使用条款和版权法。

    User: 不对不对,第一章前面其实不是第0章。请使用切片,把第1章前面的内容删掉

    Kimi: 了解您的需求,如果需要使用切片来移除“第1章”之前的所有元素,我们可以在将章节信息添加到chapters列表之后,找到“第1章”的位置,并使用切片来移除前面的元素。下面是修改后的脚本:

    import requests
    from bs4 import BeautifulSoup
    import re
    
    def get_chapter_links(chapter_list_url):
        response = requests.get(chapter_list_url, headers=headers
  • 相关阅读:
    一个可操作PPT的.Net开源库
    Shell系统学习之Shell条件测试,判断语句和运算符
    JavaScript DOM中的基本事件介绍(详细文章请看后期)
    【更新中】MYSQL常用函数及方法
    JS基本数据类型中null和undefined区别及应用
    计算机毕业设计Java考研资源共享系统(源码+mysql数据库+系统+lw文档)
    Java教程:一文搞懂hashmap是否线程安全
    每日4道算法题——第004天
    实在智能“信创RPA”完成国产化流程全适配,加入ISV华为鲲鹏展翅伙伴
    AI+Social Power,开创营销新纪元 | 2023数说故事年度社媒营销盛会,10月13日邀您共同见证
  • 原文地址:https://blog.csdn.net/toopoo/article/details/139317069
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号