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

Python新手求助:爬取德政党新闻时DataFrame存储内容不全问题

解决爬取新闻正文只存最后一个

标签的问题

嘿,作为Python爬虫新手遇到这种问题太正常啦!你猜的没错,核心问题就是循环迭代时的赋值逻辑不对——你肯定是每次遍历到一个

标签就直接把它的内容赋值给了某个变量,结果后面的内容把前面的覆盖了,最后就只剩最后一段啦。日期异常大概率也是类似的逻辑问题,或者是选择器没定位对。

我给你梳理下修复思路和示例代码:

核心问题诊断

  1. 正文覆盖问题:如果你的代码是类似content = p.get_text()这样的写法,那每次循环都会把content替换成当前

    的内容,自然最后只剩最后一段。

  2. 日期异常:要么是日期的选择器没精准定位到单篇新闻的日期,要么是循环里日期变量的更新逻辑和正文一样出了覆盖问题。

修复后的示例代码

假设你用的是BeautifulSoup解析(毕竟爬网页这个库最常用),我给你写个完整的修正版本:

import pandas as pd
import requests
from bs4 import BeautifulSoup
from time import sleep
from random import randint

# 先准备一个空列表,用来存每篇新闻的完整数据
news_list = []

# 这里替换成你实际的新闻链接列表
target_links = ["https://xxx.de/news/1", "https://xxx.de/news/2"]

for link in target_links:
    # 加个随机延迟,别给人家服务器太大压力
    sleep(randint(1, 3))
    try:
        # 发送请求并解析页面
        res = requests.get(link)
        # 德国网站可能用utf-8或者ISO-8859-1,根据实际页面调整编码
        res.encoding = "utf-8"
        soup = BeautifulSoup(res.text, "html.parser")

        # 提取标题(这里的选择器要对应你爬的网站结构,比如h1或者特定class的元素)
        news_title = soup.find("h1", class_="news-title").get_text(strip=True)
        
        # 提取日期(同样要对应网站的日期元素,比如带date类的span)
        news_date = soup.find("span", class_="publish-date").get_text(strip=True)
        
        # 提取正文:关键!用累加的方式拼接所有<p>内容
        news_content = ""
        # 先定位到正文所在的容器,再找里面的所有<p>标签,避免拿到无关的p
        content_container = soup.find("div", class_="news-content")
        for p_tag in content_container.find_all("p"):
            # 把每个p的文本拼进去,加个空格分隔段落
            news_content += p_tag.get_text(strip=True) + " "
        
        # 把当前新闻的所有数据打包成字典,加入列表
        news_list.append({
            "标题": news_title,
            "日期": news_date,
            "正文": news_content.strip()  # 去掉末尾多余的空格
        })
    except Exception as e:
        print(f"处理链接 {link} 时出错了:{e}")
        continue

# 最后把列表转成DataFrame
news_df = pd.DataFrame(news_list)
print(news_df)

几个关键注意点

  • 用列表存储数据再转DataFrame:别在循环里直接往DataFrame里追加行,效率低还容易出问题,先存列表最后统一转换更稳妥。
  • 正文累加而不是替换:初始化news_content为空字符串,每次用+=把新段落的内容拼进去,这样就能保留所有正文内容了。
  • 精准定位元素:不管是标题、日期还是正文容器,都要先用浏览器的开发者工具(F12)找到对应的HTML结构,写对选择器,不然容易拿到错误的数据。
  • 异常处理和延迟:加个try-except避免某一篇新闻出错导致整个程序挂掉,随机延迟能降低被网站反爬拦截的概率。

如果你的代码里用的是其他解析库(比如lxml),核心逻辑也是一样的——就是要把所有

的内容累加起来,而不是每次替换。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:40:06