将HTTP目录列表转为DataFrame并按日期筛选及访问链接的方法咨询
解决方案:目录列表转DataFrame后仍可沿用原有访问逻辑
完全可以基于DataFrame实现原有文件访问逻辑,甚至能借助DataFrame的结构化特性让日期筛选、文件过滤更高效。以下是具体实现步骤:
1. 解析目录HTML生成目标DataFrame
首先从HTML目录中提取日期、时间、大小、链接字段,生成结构化的DataFrame:
import re import pandas as pd import requests from io import StringIO # 基础配置 url_root = "http://your-ip-address/" auth = ("username", "password") # 获取目录页面内容 response = requests.get(url_root + "Log/", auth=auth) html_content = response.text # 正则匹配目标行:捕获日期、时间、大小、HREF链接 pattern = re.compile(r'\s+(\d{2}/\d{2}/\d{2})\s+(\d{1,2}:\d{2})\s+(\d+)\s+<A HREF="([^"]+)"') matches = pattern.findall(html_content) # 转换为DataFrame并处理数据类型 df = pd.DataFrame(matches, columns=['日期', '时间', '大小', '链接']) df['大小'] = df['大小'].astype(int) df['日期'] = pd.to_datetime(df['日期'], format='%d/%m/%y') # 提前过滤非txt文件(可选) df = df[df['链接'].str.endswith('.txt')]
2. 基于DataFrame复用原有文件访问逻辑
生成DataFrame后,遍历筛选后的行即可沿用原有请求、解析逻辑:
files_dataframes = [] file_prefix_all = "/Log/" # 按需求筛选文件:前缀匹配+txt后缀 filtered_df = df[(df['链接'].str.startswith(file_prefix_all)) & (df['链接'].str.endswith('.txt'))] # 遍历访问文件 for _, row in filtered_df.iterrows(): file_url = url_root + row['链接'] print(f"访问文件:{file_url}") file_response = requests.get(file_url, auth=auth) if file_response.status_code == 200: file_content = file_response.content.decode('utf-8') # 读取制表符分隔的txt文件为DataFrame txt_df = pd.read_csv(StringIO(file_content), encoding='utf-8', sep='\t') files_dataframes.append(txt_df)
3. 利用DataFrame实现日期筛选
这是转成DataFrame后的核心优势,比如筛选2023年11月17日及以后的文件:
# 定义目标日期并筛选 target_date = pd.to_datetime("2023-11-17") filtered_by_date = df[df['日期'] >= target_date] # 基于日期筛选结果访问文件 for _, row in filtered_by_date.iterrows(): # 复用上述文件访问逻辑 pass
注意事项
- 若目录HTML格式有变化,需调整正则表达式以匹配目标行;
- 链接中的URL编码(如
%20)无需手动解码,requests会自动处理; - 可根据需求给DataFrame添加额外字段(如文件名),方便后续数据溯源。
内容的提问来源于stack exchange,提问作者thentangler
相关产品推荐
相关产品推荐

