如何通过Python爬取网页并仅将文章标题与正文保存至CSV文件
爬虫代码修正方案:提取标题+正文并保存为CSV
原代码存在的问题
get_data()函数未返回数据,导致后续写入文件时data为None,触发报错- 直接调用
soup.find_all('p')会抓取页面所有段落标签,包含页脚、导航等无关内容,无法精准获取文章正文 - 文件保存未遵循CSV格式,路径缺少
.csv后缀,且写入方式不符合CSV规范 - 手动调用
url_1.close()属于冗余操作,with上下文管理器会自动完成文件关闭
修正后的完整代码
import requests import csv from bs4 import BeautifulSoup def get_data(): headers = { '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' } # 发起网页请求并捕获异常 r = requests.get("https://insights.blackcoffer.com/ai-in-healthcare-to-improve-patient-outcomes/", headers=headers) r.raise_for_status() soup = BeautifulSoup(r.text, 'lxml') # 提取文章标题(定位页面标题标签) title = soup.find('h1', class_='entry-title').get_text(strip=True) # 提取文章正文(定位正文容器后获取有效段落) content_container = soup.find('div', class_='entry-content') paragraphs = content_container.find_all('p') # 拼接段落文本,过滤空内容 content = '\n'.join([p.get_text(strip=True) for p in paragraphs if p.get_text(strip=True)]) return title, content # 获取标题和正文数据 article_title, article_content = get_data() # 保存为CSV文件 csv_file_path = r'C:\Users\rishabh singh\Desktop\url_1.csv' with open(csv_file_path, mode='w', encoding='utf-8', newline='') as file: csv_writer = csv.writer(file) # 写入表头 csv_writer.writerow(['标题', '正文']) # 写入文章数据 csv_writer.writerow([article_title, article_content]) print(f"数据已成功保存至:{csv_file_path}")
修正说明
- 数据返回优化:让
get_data()返回提取到的标题和正文,确保后续能获取到有效数据 - 精准内容定位:通过页面元素的class属性定位标题(
h1.entry-title)和正文容器(div.entry-content),避免无关内容干扰 - CSV规范写入:使用
csv.writer工具,添加表头,确保文件符合CSV格式;设置utf-8编码防止中文乱码,newline=''避免生成空行 - 异常处理与兼容性:添加
r.raise_for_status()捕获请求错误,更新User-Agent为现代浏览器标识,提升请求成功率 - 文本处理优化:过滤正文里的空段落,让保存的内容更整洁
内容的提问来源于stack exchange,提问作者SWARNIM SINGH
相关产品推荐
相关产品推荐

