首页 > 编程语言 >Python web crawler(2.1)多循环嵌套练习

Python web crawler(2.1)多循环嵌套练习

时间:2024-01-25 18:58:44浏览次数:37  
标签:章节 web name title Python book 内容 file 2.1

写个函数,传入(书名:book,标题:tittle,内容:content),要求在book文件夹下(不存在则创建),创建每个tittle.txt文件,写入content内容

import os

def save_to_file(folder_book, title, content):
    # 如果文件夹不存在,则创建
    if not os.path.exists(folder_book):
        os.makedirs(folder_book)

    # 构建文件路径
    file_path = os.path.join(folder_path, f"{title}.txt")

    # 写入内容到文件
    with open(file_path, 'w', encoding='utf-8') as file:
        file.write(content)

# 示例用法
book_name = "MyBook"
chapter_title = "Chapter1"
chapter_content = "This is the content of Chapter 1."

save_to_file(book_name, chapter_title, chapter_content)

从某一个书的网站,写几个函数,分别获取目录中的(所有书、所有章节、所有内容),返回为字典,写入本地

import random
import time
import json  # 导入 json 模块

def get_html(url):
    # 实现 get_html 函数,返回一个 tree 对象
    # (此处应该包含网络请求和HTML解析的代码)
    pass
    return tree

def get_books(tree):
    # 实现 get_books 函数,返回一个字典,其中键是书名,值是书的URL
    # (此处应该包含从 tree 对象中提取书名和URL的代码)
    pass
    return {book_name: book_url}

def book_mulu(book_url):
    # 实现 book_mulu 函数,返回一个字典,其中键是章节标题,值是章节URL
    # (此处应该包含从 book_url 获取章节信息的代码)
    pass
    return {title: title_url}

def book_mulu_detail(title: title_url):
    # 实现 book_mulu_detail 函数,返回一个字典,其中键是标题,值是文本内容
    # (此处应该包含从 tree 对象中提取文本内容的代码)
    pass
    return {title: text}

def main():
    # 定义起始URL
    url = 'https://www.shu.com/book1'
    # 初始化一个空字典,用于存储最终结果
    result_dict = {}
    
    # 遍历每一本书,获取书名和对应的URL
    for book_name, book_url in get_books(get_html(url)).items():
        print(book_name)  # 打印当前处理的书名
        # 初始化一个空字典,用于存储当前书籍的章节和内容
        book_dict = {}
        # 遍历当前书籍的每个章节,获取章节标题和对应的URL
        for title, title_url in book_mulu(get_html(book_url)).items():
            # 获取当前章节的内容
            title_content = book_mulu_detail(title, get_html(title_url))
            # 更新当前书籍字典,将当前章节和内容添加进去
            book_dict.update(title_content)
            # 打印当前章节信息和下载完成提示
            print(title, title_url, "下载完成")
            # 随机等待一段时间,模拟人的操作,避免过于频繁的请求
            time.sleep(random.randint(1, 3))
            
        # 将当前书籍字典添加到最终结果字典中
        result_dict[book_name] = book_dict

    # 将最终结果字典以 JSON 格式写入文件
    with open('output.json', 'w', encoding='utf-8') as file:
        json.dump(result_dict, file, ensure_ascii=False, indent=2)

# 执行主题函数
if __name__ == '__main__':
    main()

把下面目录字典,依次写入到\书X\章节X.text

mulu_dict = {
    '书1': {'章节1': '内容1', '章节2': '内容2', '章节3': '内容3'},
    '书2': {'章节1': '内容1', '章节2': '内容2', '章节3': '内容3'},
    '书3': {'章节1': '内容1', '章节2': '内容2', '章节3': '内容3'},
    '书4': {'章节1': '内容1', '章节2': '内容2', '章节3': '内容3'}
}

代码如下

import os

# 你的 result_dict 字典
mulu_dict = {
    '书1': {'章节1': '内容1', '章节2': '内容2', '章节3': '内容3'},
    '书2': {'章节1': '内容1', '章节2': '内容2', '章节3': '内容3'},
    '书3': {'章节1': '内容1', '章节2': '内容2', '章节3': '内容3'},
    '书4': {'章节1': '内容1', '章节2': '内容2', '章节3': '内容3'}
}

def write_to_files(dictionary):
    for book_name, chapters in dictionary.items():
        # 如果文件夹不存在,则创建
        if not os.path.exists(book_name):
            os.makedir(book_name)
        print('准备写入:',book_name)

        for chapter_name, content in chapters.items():
            # 构建文件相对路径 /books/书名/章节名.txt
            file_path = os.path.join(book_dir, f"{chapter_name}.txt")
            # 写入标题和内容到文件中
            with open(file_path, 'w', encoding='utf-8') as file:
                file.write(chapter_name+'\n')
                file.write(content)
                print(chapter_name,'写入完成')

# 调用函数写入文件
write_to_files(mulu_dict)

 

标签:章节,web,name,title,Python,book,内容,file,2.1
From: https://www.cnblogs.com/Magiclala/p/17987918

相关文章

  • Web前端性能优化
    性能优化是前端开发无法避免的点,给客户带去良好的访问体验也是开发人员必须关注的问题。前端性能优化大体分为两个部分:代码优化、资源及其他优化,本文主要记录资源及其他优化要怎么做。1、CSS样式文件在页面头部引入,Javascript文件在页面尾部引入页面加载单线程可能会阻塞页面的......
  • python之生成器
    1.生成器优势节省空间:生成器按需生成值,避免了一次性加载所有数据到内存中。这对于处理大型数据集尤其重要。惰性计算:生成器支持惰性计算,只有在需要时才计算值。这在处理无限序列或需要动态生成数据的场景中非常有用。一次性使用:生成器通常是一次性的,一旦遍历完毕,就需要重新创......
  • locust+python性能测试库
    一.简介locust官网介绍:Locust是一个用于HTTP和其他协议的开源性能/负载测试工具。其对开发人员友好的方法允许您在常规Python代码中定义测试。Locust测试可以从命令行运行,也可以使用其基于Web的UI运行。可以实时查看吞吐量、响应时间和错误和/或导出以供以后分析。二.......
  • Python并发编程之进程池,线程池与信号量
    【一】进程池和线程池【0】池池的概念:资源管理:池用于管理和维护一组资源(如进程或线程),而不是每次需要时都创建和销毁这些资源。这有助于减少创建和销毁的开销。并发处理:池允许并发地执行多个任务,每个任务由池中的一个资源处理。这提高了程序的并发性能。任务队列:池通......
  • python之装饰器使用场景
    1.用户登录认证有三个界面需要登录认证通过后才能查看一个登录函数作为装饰器调用使用@函数名调用中如果加参数,则装饰器需要再加一层1deflogin(func):2defdesc(*args,**kwargs):3user='test'4passwd='123456'5n=06......
  • 详解ElasticSearch Python Client ReadTimeout
    详解ElasticSearchPythonClientReadTimeout在使用Python连接Elasticsearch时,我们经常会遇到一些异常情况,其中之一就是ReadTimeout错误。本文将详细介绍这个错误的原因以及如何处理。什么是ReadTimeout错误?ReadTimeout错误通常是由Elasticsearch连接超时引起的。当在与Elasticsea......
  • websocket 包括心跳机制
    https://zhuanlan.zhihu.com/p/6643681141.创建websocket对象,初始化创建对象,开启、onmsg、关闭开启,开始心跳检测发送传递信息(ifwebsocket对象存在,且处于open状态onmsg,接收服务器传送过来的信息,进行业务操作关闭,销毁心跳检测,清除心跳......
  • JAVA调用Python脚本执行
    SpringBoot-web环境<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>springboot--启动类@SpringBootApplication(ex......
  • python代码
    #读取.mat文件mat_data=scipy.io.loadmat('C.mat')#获取矩阵数据adj_matrix=mat_data['C']一个简短的python代码:alph=['A','B','C','D','E','F','G','H','I','J......
  • APISIX同时代理websocket和http请求 websocket无法正常工作
    1.配置了一个路由同时代理websocket和http请求 2.打开了websocket支持,websocket还是无法工作  3.定位3.1通过postman分别走apisix和不经过apisix建立websocet连接,发现经过apisix也能成功建立连接,但是10秒左右就自己断开了。  3.2思考3.3决定试一下是否和超时配置......