def head_x(): #设置请求头 header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', 'Cookie': 'uuunlj69ohkgju9ndg1fqvt6bj' } return header import os print("当前工作目录:", os.getcwd()) import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) import requests from lxml import etree import numpy as np import time import pandas as pd import re import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') def html_link(): #得到二级页面链接 list = [] for i in range(10,11): print('爬取第{}页'.format(i)) url = 'https://m.hongmengosapp.com/rj/list_0_1_{}.html'.format(i) head = head_x() rq = requests.get(url,headers=head,verify=False) rq.encoding = 'utf-8' html = etree.HTML(rq.content) rqq = html.xpath('/html/body/div[4]/ul[2]/li[position()>=1 and position()<=10]/a[2]/@href') list.extend(rqq) print(rqq) time.sleep(np.random.randint(1,3)) return list def second_page(): #二级子页面 list_link = html_link() list_1 = [] for i in list_link: item = {} rqqq = requests.get(i,headers=head_x(),verify=False) rqqq.encoding = 'utf-8' time.sleep(np.random.randint(1,3)) html = etree.HTML(rqqq.text) item['APP_Name'] = re.sub(r"\s", "", ",".join(html.xpath('/html/body/div[2]/div[2]/dl/dd/h1/text()'))) item['APP_Developer'] = re.sub(r"\s", "", ",".join(html.xpath('/html/body/div[2]/div[2]/ul/li[1]/span/text()'))) list_1.append(item) print(item) return list_1 def save_data(): data = second_page() data = pd.DataFrame(data) data.to_csv('鸿蒙数据.csv',index=False,encoding='utf-8-sig') return data if __name__ == '__main__': used_car = save_data() 把这个脚本输出添加一个绝对路径D:\shuchuwenjian

时间: 2025-03-21 08:13:40 浏览: 28
<think>嗯,用户让我给这个Python脚本的输出添加一个绝对路径D:\shuchuwenjian。首先,我需要仔细看一下用户提供的代码,找出哪里需要修改。 用户当前的代码中,保存数据的函数是save_data(),里面使用了pd.DataFrame(data).to_csv('鸿蒙数据.csv', ...)。这里文件名是相对路径,所以默认会保存在当前工作目录下。用户想要改为绝对路径D:\shuchuwenjian,所以需要修改文件名部分。 首先,我需要确定在to_csv的时候,如何指定绝对路径。正确的做法应该是将路径拼接起来,比如os.path.join('D:\shuchuwenjian', '鸿蒙数据.csv')。或者直接写成完整的路径,比如r'D:\shuchuwenjian\鸿蒙数据.csv'。不过,需要注意反斜杠在Python字符串中的转义问题,所以最好使用原始字符串或者在路径前面加r,或者用双反斜杠。 另外,还需要确保目标目录D:\shuchuwenjian存在,否则保存文件时会出错。所以代码中可能需要添加创建目录的步骤,比如使用os.makedirs(),并设置exist_ok=True参数,这样即使目录已存在也不会报错。 接下来,我需要检查用户提供的代码是否已经导入了os模块。是的,用户代码中有import os,所以不需要再添加。那么可以在save_data()函数里,添加目录创建的代码,确保路径存在。 所以修改步骤应该是: 1. 在save_data()函数中,添加os.makedirs('D:\\shuchuwenjian', exist_ok=True),这样如果目录不存在就会创建。 2. 修改to_csv的路径参数,使用绝对路径,比如os.path.join('D:\\shuchuwenjian', '鸿蒙数据.csv'),或者直接写r'D:\shuchuwenjian\鸿蒙数据.csv'。 需要注意的是,Windows路径中的反斜杠在Python字符串中需要转义,所以应该写成双反斜杠或者使用原始字符串。例如,使用r'D:\shuchuwenjian\鸿蒙数据.csv'会更安全,避免转义错误。 然后,测试修改后的代码是否能在D盘创建shuchuwenjian文件夹,并正确保存文件。如果用户没有权限或者路径错误,可能会失败,所以需要确保路径正确,并且有写入权限。 此外,用户提供的代码中,sys.stdout的编码设置可能不会影响文件保存,但保存CSV时指定了utf-8-sig编码,应该没问题。所以主要修改点就是在保存路径前创建目录,并指定绝对路径。 最后,确保在save_data()函数中正确应用这些修改,并且没有其他部分受到影响。比如,原来的函数返回data,这个不需要改变,只需要调整保存路径即可。</think>我帮你修改了保存路径部分,添加了绝对路径和自动创建文件夹的功能。修改后的代码如下: ```python # ...前面代码保持不变... def save_data(): data = second_page() data = pd.DataFrame(data) # 添加绝对路径处理 save_dir = r'D:\shuchuwenjian' # 使用原始字符串避免转义问题 save_path = os.path.join(save_dir, '鸿蒙数据.csv') # 自动创建目录(如果不存在) os.makedirs(save_dir, exist_ok=True) data.to_csv(save_path, index=False, encoding='utf-8-sig') print(f'数据已保存至:{save_path}') # 添加保存路径提示 return data # ...后面代码保持不变... ``` 修改说明: 1. 路径处理: - 使用`r'D:\shuchuwenjian'`原始字符串避免转义问题 - 通过`os.path.join()`组合完整路径更规范 2. 自动创建目录: - `os.makedirs(save_dir, exist_ok=True)` 会在保存前自动创建目录 - `exist_ok=True`参数确保目录已存在时不会报错 3. 添加保存提示: - 输出时会显示完整保存路径如:`数据已保存至:D:\shuchuwenjian\鸿蒙数据.csv` 执行效果: 1. 首次运行时自动创建D盘下的`shuchuwenjian`文件夹 2. CSV文件将保存在指定绝对路径下 3. 控制台会显示最终保存路径 注意:请确保D盘有写入权限。如果出现权限问题,可以: 1. 以管理员身份运行脚本 2. 检查防病毒软件设置 3. 手动创建目标文件夹并赋予写入权限
阅读全文

相关推荐

# 导入库 包 # pip install pandas -i https://mirrors.aliyun.com/pypi/simple/ from operator import index import pandas as pd import os import requests # pip install tqdm -i https://mirrors.aliyun.com/pypi/simple/ from tqdm import tqdm import time #避免网站反爬,使用伪装头 header = {"user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 12_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"} # 定义一个函数 def gen_rs_ts_signature(page=1): # 导入库 包 import time import random import hashlib sha256 = hashlib.sha256() c = str(int(time.time() *1000)) #13位时间戳 a = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] h =''.join(random.choice(a)for i in range(16)) #随机16个字符 d ='$d6eb7ff91ee257475%' #默认值 e ='2' #最新信息为2 u ='10'#每页数量 page=str(page)#页码 ts = c rs = h bb = [d,u,c,e,page,h] bb.sort() signature=hashlib.sha256((''.join(bb)).encode('utf-8')).hexdigest() return ts,rs,signature # 设置csv文件路径、最大页数 csv_file_path = 'D:\黑猫投诉\黑猫投诉.csv' # 假设采集1-50页 max_page = 50 # 使用for进行循环 for page in tqdm(range(1,max_page+1),'采集进度'): time.sleep(1) ts,rs,signature = gen_rs_ts_signature() page_url = f'https://tousu.sina.cn/api/index/feed?ts={ts}&rs={rs}&signature={signature}&type=2&page_size=10&page={page}' page_resp = requests.get(page_url,headers=header) #创建一个标志变量 用于判断是否是第一次写入 first_write = not os.path.exists(csv_file_path) for complaint_card in page_resp.json()['result']['data']['lists']: data = dict() data['title'] =complaint_card['main']['title'] data['timestamp'] = complaint_card['main']['timestamp'] data['summary'] = complaint_card['main']['summary'] data['cotitle'] = complaint_card['main']['cotitle'] data['appeal'] = complaint_card['main']['appeal']

import csvimport jsonimport requestsimport os class crawler:    def __init__(self):        pass     def save_data(self, data):        with open('./高考志愿.csv', encoding='UTF-8', mode='a+', newline='') as f:            f_csv = csv.writer(f)            f_csv.writerow(data)        f.close()     def get_data(self):        header = {            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58'        } # 添加表头        head = ['省份', '年份', '学校名称', '专业', '最低录取分', '最低录取名次', '选课要求']# 清除已存在的同名文件        v_file = '高考志愿.csv'        if os.path.exists(v_file):            os.remove(v_file)            print('高考志愿存在,已清除:{}'.format(v_file))        with open('./高考志愿.csv', encoding='utf-8-sig', mode='w', newline='') as f:            f_csv = csv.writer(f)            f_csv.writerow(head)            f.close()         s1 = 'https://static-data.gaokao.cn/www/2.0/schoolspecialindex/'        s2 = '/33/3/16/'  # 表示浙江省         for m in range(2017, 2023, 1):            for k in range(1, 7):                try:  # 99是四川大学的编号                    urll = s1 + str(m) + '/' + str(99) + s2 + str(k) + '.json'                    print(urll)                    htmll = requests.get(urll, headers=header).text                    unicode = json.loads(htmll)                    try:                        da = unicode["data"]                    except:                        break                    da = da["item"]                    for w in da:                        sc = w["min"]                 # 最低录取分                        min_section = w["min_section"]  # 最低录取名次                        spname = w["spname"]         # 专业名称                        sp_info = w["sp_info"]         # 选课要求                        tap = ('四川', m, '四川大学', spname, sc, min_section, sp_info)                        self.save_data(tap)                except:                    pass

最新推荐

recommend-type

网络经济年度报告.docx

网络经济年度报告.docx
recommend-type

软件和信息服务业投融资典型案例分析.docx

软件和信息服务业投融资典型案例分析.docx
recommend-type

基于云计算大数据的图书馆创新发展模式研究.docx

基于云计算大数据的图书馆创新发展模式研究.docx
recommend-type

中国医疗大数据行业市场现状及发展趋势分析-技术应用环境将更加成熟.docx

中国医疗大数据行业市场现状及发展趋势分析-技术应用环境将更加成熟.docx
recommend-type

微服务高可用网关与容错架构实践.docx

微服务高可用网关与容错架构实践.docx
recommend-type

掌握Java端口扫描器:从入门到实践

标题中提到的“java端口扫描器”,从字面上理解,这是一个使用Java编程语言编写的网络端口扫描工具。端口扫描是一种网络探测技术,它用于确定哪些网络服务(应用层协议)在运行,并且哪些端口号上是开放的。端口扫描通常用于网络管理、故障排除、安全评估等场景。 描述中提到的“简单易懂”,意味着这款Java端口扫描器可能采用了简单直观的编程逻辑和用户界面设计,让即使是编程初学者也能够快速理解和使用它。 标签“java 端口 扫描器”强调了这项技术的三个关键词:Java编程语言、端口和扫描器。这意味着这项工作不仅涉及网络编程,还涉及到Java语言的特定知识。 至于“压缩包子文件的文件名称列表”,此处提及的“CH07”和“java端口扫描器”可能是相关代码或者文档的名称。在软件开发中,文件名称通常会反映文件内容或功能,比如“CH07”可能指的是某种教程或指南的第七章,而“java端口扫描器”很可能就是我们讨论的端口扫描器项目或代码文件的名称。 现在让我们详细探讨相关的知识点: 1. Java编程语言 Java是一种广泛使用的面向对象的编程语言,设计上具有跨平台兼容性。它运行在Java虚拟机(JVM)上,可以一次编写,到处运行。端口扫描器选择使用Java开发,可能是因为Java的跨平台特性,使得它可以在不同的操作系统上运行而无需修改代码。 2. 网络编程基础 网络编程主要涉及到使用套接字(sockets)进行网络通信。端口扫描器会使用套接字连接到目标服务器的不同端口,以尝试发现哪些端口是开放的。在Java中,这通常涉及到java.net包中的Socket和ServerSocket类的使用。 3. TCP/IP协议和端口 端口扫描器主要关注的是TCP/IP协议栈中的传输控制协议(TCP)和用户数据报协议(UDP)。端口是网络服务监听和接收请求的网络地址的一部分。常见的端口有21(FTP),22(SSH),25(SMTP),80(HTTP),443(HTTPS)等。端口扫描器通过尝试建立连接到这些端口来检查它们是否开放。 4. 端口扫描技术 端口扫描技术有多种,包括但不限于全连接扫描(TCP connect()扫描)、半开放扫描(SYN扫描)、UDP扫描、TCP ACK扫描等。全连接扫描是最基本也是最简单的一种扫描方法,它会尝试与目标端口建立完整的TCP连接。如果连接成功,说明端口是开放的。 5. 安全性考虑 尽管端口扫描在合法的情况下用于网络安全和维护,但未经授权的扫描可能违反法律法规。因此,端口扫描器的开发和使用应当遵守相关的法律法规和道德准则。 6. Java端口扫描器的实现 一个简单的Java端口扫描器可能会按照以下步骤实现: - 使用循环结构遍历要扫描的端口号。 - 对于每一个端口,尝试创建到目标IP地址的TCP连接。 - 如果连接成功,打印出开放的端口号;如果连接失败或超时,则说明端口未开放或关闭。 - 可能还需要添加异常处理机制,以便于扫描过程中应对各种可能出现的网络异常。 最后,考虑到文件名称列表中提到的“CH07”,如果指的是某个教程或者书籍的第七章,那么可能涉及的内容包括对Java网络编程的深入解释,或者是端口扫描器的设计思路、源代码分析以及可能的进阶用法等。对于“java端口扫描器”这个文件名,则可能是一个现成的项目文件,包含了所有实现端口扫描器的Java代码文件、文档说明以及运行程序所需的全部资源。
recommend-type

【性能测试基准】:为RK3588选择合适的NVMe性能测试工具指南

# 1. NVMe性能测试基础 ## 1.1 NVMe协议简介 NVMe,全称为Non-Volatile Memory Express,是专为固态驱动器设计的逻辑设备接口规范。与传统的SATA接口相比,NVMe通过使用PCI Express(PCIe)总线,大大提高了存储设备的数据吞吐量和IOPS(每秒输入输出操作次数),特别适合于高速的固态存储设备。
recommend-type

vllm部署大模型为什么只用一张卡怎么设置成多卡

<think>嗯,用户的问题是关于如何将vLLM的大模型部署从单GPU改为多GPU设置。用户提供了两条参考引用,其中引用[1]提到通过设置tensorparallelsize在每个节点上使用多个GPU,引用[2]则给出了启动API服务时的CUDA设备指定示例。用户的实际需求是在使用vLLM部署时充分利用多GPU资源,可能遇到性能瓶颈或希望提升推理速度。用户身份推测是AI部署工程师或研究人员,对技术细节有明确要求。在回复设计上,需要强调三个关键点:1)设备指定:通过CUDA_VISIBLE_DEVICES环境变量控制可用GPU2)张量并行:直接修改tensor_parallel_size参数3)
recommend-type

ASP+access实现的新闻管理系统开发教程

ASP新闻发布系统是一种利用ASP(Active Server Pages)技术结合Microsoft Access数据库来实现内容发布和管理的系统。ASP是一种服务器端脚本环境,使用它可以创建动态交互式网页。Access数据库则用于存储新闻文章、用户信息、评论等数据。以下从几个方面详细说明标题和描述中提到的知识点: ### 1. ASP技术基础 ASP技术允许开发者使用VBScript或JavaScript等脚本语言编写程序,这些程序在服务器上运行,动态生成HTML页面。ASP页面的文件通常以.asp为扩展名。在新闻发布系统中,ASP可用于实现以下功能: - 用户身份验证:检查用户输入的用户名和密码是否合法,从而允许或拒绝访问。 - 数据库交互:通过ADO(ActiveX Data Objects)连接和操作Access数据库,实现数据的增删改查。 - 动态内容生成:根据数据库中的新闻数据动态生成网页内容。 - 文件上传和下载:允许管理员上传新闻图片或文件,用户可以下载这些内容。 ### 2. Microsoft Access数据库 Access是一个桌面数据库系统,适合存储小型到中型的数据集。它使用结构化查询语言(SQL)作为其查询语言,允许开发者对数据进行管理。在ASP新闻发布系统中,Access数据库通常包含以下表: - 新闻内容表:存储新闻标题、内容、发布日期、作者等信息。 - 用户表:存储注册用户的用户名、密码、联系方式等信息。 - 评论表:存储用户对新闻的评论内容以及评论者的相关信息。 ### 3. 系统功能模块 ASP新闻发布系统一般包含以下几个核心功能模块: - 用户管理模块:包括用户注册、登录、个人信息管理、密码修改等。 - 新闻发布模块:允许授权用户发布、编辑和删除新闻。 - 新闻浏览模块:展示新闻列表和新闻内容,可能支持按类别或时间排序。 - 搜索功能模块:通过关键词搜索新闻文章。 - 系统设置模块:进行网站基础信息设置,如新闻分类设置、网站标题设置等。 ### 4. 开发环境与工具 - 开发语言:主要使用VBScript或JavaScript作为ASP的脚本语言。 - 开发环境:可以使用微软的Visual InterDev或者任何支持ASP开发的IDE。 - 数据库管理:使用Microsoft Access作为数据库管理工具。 - 测试工具:利用浏览器作为测试工具,查看ASP页面在服务器上的表现。 ### 5. 关键技术点 - SQL语句的使用:在ASP中通过ADO技术执行SQL查询和更新数据库。 - Session和Cookies的应用:用于在用户会话期间存储和管理用户信息。 - HTML和CSS的布局:为了创建用户友好的界面。 - 安全措施:包括输入验证、防止SQL注入、XSS攻击等。 ### 6. 教材与学习资源 - 教材选择:通常选用ASP编程、网络编程基础或网页设计相关的书籍。 - 在线资源:可以通过网上教程、视频课程和开发社区来学习ASP和Access的进一步应用。 - 实践操作:通过实际开发新闻发布系统来深入理解和掌握知识点。 ### 7. 系统部署 - 服务器配置:需要配置支持ASP和IIS(Internet Information Services)的服务器。 - 文件上传:将ASP文件和Access数据库文件上传至服务器。 - 网站域名绑定:将新闻发布系统与一个域名绑定,以便用户访问。 ### 总结 ASP+Access制作的新闻发布系统是一个实践性强的项目,适合学习动态网页和数据库交互的基础。它涉及编程、数据库设计和网站维护等多个方面的知识。通过具体实施这个项目,开发者不仅可以提高自己的编程能力,而且能对网站开发的整个流程有更深入的了解。在教材的指导下,学生能够结合理论和实践,为日后的IT职业生涯打下坚实的基础。
recommend-type

【固态硬盘寿命延长】:RK3588平台NVMe维护技巧大公开

# 1. 固态硬盘寿命延长的基础知识 ## 1.1 固态硬盘的基本概念 固态硬盘(SSD)是现代计算设备中不可或缺的存储设备之一。与传统的机械硬盘(HDD)相比,SSD拥有更快的读写速度、更小的体积和更低的功耗。但是,SSD也有其生命周期限制,主要受限于NAND闪存的写入次数。 ## 1.2 SSD的写入次数和寿命 每块SSD中的NAND闪存单元都有有限的写入次数。这意味着,随着时间的推移,SSD的