批量爬取多站点数据至Url_id命名文件时内容重复问题排查
解决爬取内容按URL_ID写入文件时内容重复、一致的问题
你的代码存在两个核心问题:
- 所有文件内容相同:遍历
urls时未将每个URL与对应的url_id绑定,反而在内部循环遍历全部url_id,导致每个URL的爬取内容被写入所有ID对应的文件,最终所有文件仅保留最后一次遍历的内容。 - 重复循环写入:嵌套循环层级混乱,在
article_title的循环内又嵌套了url_id和article_texts的循环,造成重复写入操作。
修正后的代码
import os import requests import pandas as pd from bs4 import BeautifulSoup # 读取Excel文件 data_ex = pd.read_excel('input.xlsx') # 提前创建目标文件夹,避免重复判断 folder = 'files_folder' if not os.path.exists(folder): os.makedirs(folder) # 同时遍历URL_ID和对应的URL,确保一一对应 for idx, row in data_ex.iterrows(): url_id = row['URL_ID'] url = row['URL'] # 请求网页 res = requests.get(url) soup = BeautifulSoup(res.text, 'html.parser') # 获取文章标题(增加容错判断) article_title = soup.find("h1", class_="entry-title") title_text = article_title.getText().strip() if article_title else "无标题" # 获取文章详情(增加容错判断) article_content = soup.find(class_="td-post-content tagdiv-type") content_text = article_content.getText().strip() if article_content else "无内容" # 生成文件路径并写入内容 file_path = os.path.join(folder, f"{url_id}.txt") with open(file_path, 'w', encoding="utf-8") as file: file.write(f"{title_text}\n\n{content_text}")
关键改动说明
- 绑定URL与URL_ID:使用
data_ex.iterrows()同时遍历每行的URL_ID和URL,确保每个ID对应唯一的目标网页,从根源解决内容错位问题。 - 简化循环结构:去掉多余的嵌套循环,每个URL的爬取和写入逻辑独立完成,避免重复操作。
- 提前创建文件夹:将文件夹创建逻辑移到循环外,避免每次循环都判断文件夹是否存在,提升效率。
- 增加容错处理:对标题和内容的获取增加判断,避免网页结构异常导致代码报错。
- 优化内容格式:用
strip()去除多余空白字符,用换行分隔标题和内容,提升文件可读性。
内容的提问来源于stack exchange,提问作者Abuchi
相关产品推荐
相关产品推荐

