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

求助:使用Pandas生成CSV仅输出一行数据的问题排查

问题排查与修复

核心原因:缩进错误

你的代码里,遍历URL的for循环结束后才执行结果存入列表的操作,导致只有最后一个URL的分析结果被添加到列表中,最终生成的CSV自然只有1行。

具体来说,sentiment = doc._.blob.polarity开始到total_neg.append(', '.join(set(negative_words)))的所有代码,都应该缩进在for count, x in enumerate(urls):的循环体内部,这样每个URL处理完后,都会把结果存入对应的列表。

另外还有个小问题:处理HTML文本时,page_text和doc的生成被放在了遍历soup(["script", ...])的循环里,这会导致每删除一个标签就重新处理一次文本,完全没必要,应该把这部分代码移到删除标签的循环外面。

修正后的代码

import spacy
from spacytextblob.spacytextblob import SpacyTextBlob
import pandas as pd
from bs4 import BeautifulSoup
import requests

nlp = spacy.load('en_core_web_sm')
nlp.add_pipe('spacytextblob')
df = pd.read_csv("urls2.csv")
urls = df["Address"].tolist()

url_sent_score = []
url_sent_label = []
total_pos = []
total_neg = []

for count, x in enumerate(urls):
    url = x
    headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
    res = requests.get(url, headers=headers)
    html_page = res.text

    soup = BeautifulSoup(html_page, 'html.parser')
    # 移除不需要的标签,仅负责删除操作
    for script in soup(["script", "style","meta","label","header","footer"]):
        script.decompose()
    # 文本处理与doc生成移到循环外,仅执行一次
    page_text = (soup.get_text()).lower()
    page_text = page_text.strip().replace("  ","")
    page_text = "".join([s for s in page_text.splitlines(True) if s.strip("\r\n")])
    doc = nlp(page_text)

    # 以下代码缩进在for循环内,每个URL处理后立即存入列表
    sentiment = doc._.blob.polarity
    sentiment = round(sentiment, 2)

    if sentiment > 0:
        sent_label = "Positive"
    else:
        sent_label = "Negative"

    url_sent_label.append(sent_label)
    url_sent_score.append(sentiment)
    positive_words = []
    negative_words = []

    for x in doc._.blob.sentiment_assessments.assessments:
        if x[1] > 0:
            positive_words.append(x[0][0])
        elif x[1] < 0:
            negative_words.append(x[0][0])
        else:
            pass

    total_pos.append(', '.join(set(positive_words)))
    total_neg.append(', '.join(set(negative_words)))

# 生成结果文件
data = {
      'Sentiment Score':url_sent_score,
      'Sentiment Label':url_sent_label,
      'Positive Words':total_pos,
      'Negative Words':total_neg}

df=pd.DataFrame(data)
df.to_csv("sentiment.csv")
df.to_json("sentiment.json",orient="split")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:46:28