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

如何抓取段落不规则的新闻文章并完整存入DataFrame?

解决方案:完整抓取拆分的新闻段落并存入DataFrame

问题分析

你的代码使用soup_test.find(...)方法,该方法仅返回第一个匹配到的元素,因此只能获取第一段内容。网站通过无规律data-pos参数拆分段落,说明所有段落都属于同一类/属性的元素,需改用find_all()获取全部匹配项。

修改后的完整代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

def scrape_test(url):
    # 新增:请求目标URL并解析为BeautifulSoup对象(原代码缺失此关键步骤)
    response = requests.get(url)
    soup_test = BeautifulSoup(response.text, 'html.parser')
    
    titel = soup_test.find("h2").find(class_="align-middle").text
    autor = soup_test.find(class_="font-sansUI lg:text-base md:text-base sm:text-s text-shade-dark dark:text-shade-light mt-8").text
    datum = soup_test.find("time", class_="timeformat")["datetime"]
    
    # 修改:获取所有段落元素并拼接文本
    paragraphs = soup_test.find_all(attrs={"class": "RichText lg:w-8/12 md:w-10/12 lg:mx-auto md:mx-auto lg:px-24 md:px-24 sm:px-16 break-words word-wrap"})
    # 过滤空文本,用双换行拼接段落,保留原文结构
    inhalt = '\n\n'.join([p.text.strip() for p in paragraphs if p.text.strip()])

    artikelinformationen = {
        'Titel': [titel],
        'Autor': [autor],
        'Datum': [datum],
        'Artikel': [inhalt]
    }
    df = pd.DataFrame(artikelinformationen)
    
    return df

df_test = scrape_test(url_test)
print(df_test)

关键修改说明

  1. 补充页面请求逻辑:原代码未定义soup_test,新增requests.get()和BeautifulSoup初始化步骤,确保能正确加载并解析目标页面。
  2. 替换find为find_all:find_all()返回所有匹配的段落元素列表,而非单个元素,实现全段落抓取。
  3. 拼接段落文本:通过列表推导式提取每个段落的有效文本(过滤空内容),再用\n\n拼接成完整文章,保留段落间的换行结构。

额外提示

  • 若过长的class匹配容易出错,可简化为核心类名匹配:soup_test.find_all(class_="RichText")(需确认该类仅对应文章段落)。
  • 若遇到反爬拦截,可给requests.get()添加请求头,示例: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'}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:57:21