如何将网页提取信息保存至独立TXT文件?附现有爬虫代码
解决方案:每个URL生成独立TXT文件
我来帮你搞定这个问题!你现在的代码是把所有博客内容攒到一起最后存成一个文件,要改成每个URL对应独立文件其实很简单,核心就是在遍历每个URL的循环里直接处理并保存该URL的内容,而不是先收集所有内容再统一输出。
问题分析
原来的代码逻辑是把所有URL的内容都追加到i列表里,最后转成DataFrame存成单个txt文件。要实现每个URL对应独立文件,我们需要把「内容写入」的操作移到每个URL的循环内部,同时为每个URL生成唯一合法的文件名。
修改后的完整代码
import urllib from bs4 import BeautifulSoup import pandas as pd import time from urllib.parse import urlsplit # 用于处理URL生成安全文件名 # 读取Excel中的网址列表 crawl = pd.read_excel('C:/Users/Acer/Desktop/internal_all2.xlsx') addresses = crawl['Address'].tolist() # 遍历每个网址,同时记录索引(方便生成唯一文件名) for index, url in enumerate(addresses): time.sleep(5) response = urllib.request.urlopen(url) soup = BeautifulSoup(response, 'html.parser') content = soup.find_all('p') # 整理当前URL的所有段落内容(提取纯文本,过滤空段落) blog_content = f"来源URL: {url}\n\n" for p_tag in content: paragraph = p_tag.get_text(strip=True) if paragraph: # 跳过空的段落 blog_content += paragraph + "\n\n" # 生成安全合法的文件名(避免Windows系统的非法字符) # 方案1:基于URL的域名+路径生成,替换特殊字符 url_parts = urlsplit(url) safe_filename_part = f"{url_parts.netloc}{url_parts.path}".replace('/', '_').replace(':', '_') filename = f"C:/Users/Acer/Desktop/scripts/content/{index}_{safe_filename_part}.txt" # 方案2:简单用索引命名(更简洁),比如 blog_0.txt、blog_1.txt... # filename = f"C:/Users/Acer/Desktop/scripts/content/blog_{index}.txt" # 写入文件,指定UTF-8编码避免乱码 with open(filename, 'w', encoding='utf-8') as f: f.write(blog_content) print(f"已完成保存: {filename}")
关键修改点说明
- 移动写入逻辑到循环内:不再把所有内容收集到列表,而是处理完一个URL就立即写入对应的文件
- 生成安全文件名:用
urlsplit拆分URL,把域名和路径里的特殊字符(比如/、:)替换成下划线,避免Windows系统无法识别的文件名 - 提取纯文本内容:用
p_tag.get_text(strip=True)提取段落的纯文本,而不是直接保存BeautifulSoup对象,让文件内容更干净 - 编码优化:打开文件时指定
encoding='utf-8',避免中文、特殊字符出现乱码 - 可选文件名方案:如果不需要基于URL命名,可以用更简洁的索引命名方式(注释里的方案2)
如果遇到文件名太长或者其他细节问题,随时调整文件名生成逻辑就好!
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

