【问题标题】:Script produces some unintelligible text while writing to a csv file脚本在写入 csv 文件时会产生一些难以理解的文本
【发布时间】:2025-12-27 20:20:07
【问题描述】:

我正在尝试将一些数据写入从一些 html 元素中提取的 csv 文件。问题是当我将数据写入 excel 文件时,我可以像在该站点中看到的那样查看该文件中的文本。但是,当我将数据写入 csv 文件时出现问题。我看到一些难以理解的文字,而不是我想要的文字。

数据所在的Html元素:

<div class="col-xs-12">
    <h1 class="text-default text-darker no-margin font-180 font-bold">
        شركة الوطنية            </h1>
    <h2 class="text-default font-100 no-margin vertical-offset-5">
    </h2>
</div>

期望的输出:

شركة الوطنية

当我尝试时:

from openpyxl import Workbook
from bs4 import BeautifulSoup

wb = Workbook()
wb.remove(wb['Sheet'])
ws = wb.create_sheet("experimental")
ws.append(['name'])
soup = BeautifulSoup(htmlcontent,"lxml")
name = soup.select_one("h1").get_text(strip=True)
ws.append([name])
wb.save("document.xlsx")

它会生成一个 excel 文件,其中的文本看起来像 [如预期的那样]:

但是,当我尝试:

import csv
from bs4 import BeautifulSoup

with open("demo.csv","w",newline="",encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(['name'])
    soup = BeautifulSoup(htmlcontent,"lxml")
    name = soup.select_one("h1").get_text(strip=True)
    writer.writerow([name])

它会生成一个 csv 文件,其中的文本看起来很糟糕:

如何将确切的文本写入 csv 文件?

【问题讨论】:

  • 您确定您的文本编码是 UTF-8 吗?照原样,您告诉 Python 您正在写入 CSV 文件的内容是使用 UTF-8 字符编码格式化的。因此,它将其编写为 UTF-8。这可能是您问题的根源!
  • 那肯定是错误的编码。 @alex_bits 这里的正确方法是什么?谢谢。
  • 试试 UTF-16?这可能有效

标签: python python-3.x csv web-scraping


【解决方案1】:

为了补充@alex_bits 所说的内容,我会将 UTF 版本更改为 UTF-16,如下所示:

import csv
from bs4 import BeautifulSoup

with open("demo.csv","w",newline="",encoding="utf-16") as f:
    writer = csv.writer(f)
    writer.writerow(['name'])
    soup = BeautifulSoup(htmlcontent,"lxml")
    name = soup.select_one("h1").get_text(strip=True)
    writer.writerow([name])

【讨论】:

    【解决方案2】:

    您可能已经怀疑这里的问题在于您的编码并且对它的理解非常出色。而不是utf-8,你应该使用utf-8-sig

    import csv
    text = "شركة الوطنية"
    with open('test.csv', 'w', encoding='utf-8-sig') as csv_file:
        csv_writer = csv.writer(csv_file)
        csv_writer.writerow([text])
    

    输出

    【讨论】:

    • 一个小问题 - 我如何确定我应该为任何文本使用哪种编码?谢谢。
    • 编码本身就是一个完整的世界,它实际上取决于/归结为您的偏好或上游或下游流程的预期。
    最近更新 更多