Python爬虫代码导出空CSV文件,请求分析故障原因
问题排查与修复方案
核心错误原因
1. 未处理基础反爬机制
直接调用requests.get()发起请求时,服务器会识别出非浏览器请求,返回的页面不包含新闻条目内容,导致soup.find_all("div", class_="views-row")无法抓取到任何数据,最终结果集为空。
2. 元素定位逻辑不精准
description_elem = entry.find("div", class_="field-content")会匹配到多个无关元素(比如标题所在的父容器也带有该class),导致无法正确获取描述内容。- 原代码中获取的URL是相对路径,未补全域名,后续无法直接访问。
修复后的代码
import csv import requests from bs4 import BeautifulSoup def scrape_eeoc_news(): url = "https://www.eeoc.gov/newsroom/search" # 添加请求头模拟浏览器,绕过基础反爬 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.content, "html.parser") results = [] entries = soup.find_all("div", class_="views-row") for entry in entries: # 精准定位标题元素:h3下的a标签 title_elem = entry.find("h3", class_="field-content").find("a") if entry.find("h3", class_="field-content") else None # 定位描述元素:专属的body字段容器 description_elem = entry.find("div", class_="field--name-body") # 定位日期元素 date_elem = entry.find("span", class_="date-display-single") if title_elem and description_elem and date_elem: title = title_elem.text.strip() # 提取描述文本,优先取p标签内容 description = description_elem.find("p").text.strip() if description_elem.find("p") else description_elem.text.strip() date = date_elem.text.strip() # 拼接完整可访问的URL news_url = "https://www.eeoc.gov" + title_elem["href"] results.append({ "title": title, "description": description, "date": date, "url": news_url }) return results else: print(f"请求失败,状态码:{response.status_code}") return [] def export_to_csv(data, filename): with open(filename, "w", newline="", encoding="utf-8") as csvfile: fieldnames = ["title", "description", "date", "url"] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for entry in data: writer.writerow(entry) if __name__ == "__main__": news_entries = scrape_eeoc_news() export_to_csv(news_entries, "eeoc_news.csv") print(f"共导出{len(news_entries)}条数据到eeoc_news.csv")
关键修复说明
- 增加
headers模拟浏览器请求,解决服务器拦截爬虫的问题。 - 优化元素定位逻辑,避免匹配无关元素,确保数据准确性。
- 将相对路径URL补全为完整域名,保证导出的链接可直接访问。
- 新增数据条数提示,直观验证抓取结果。
内容的提问来源于stack exchange,提问作者user23471091
相关产品推荐
相关产品推荐

