You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:15:00