【问题标题】:Why does this python bs4&csv writer code write in BOM?为什么这个 python bs4&csv 编写器代码写在 BOM 中?
【发布时间】:2020-06-02 01:37:49
【问题描述】:

我正在使用 bs4 从 HTML 中提取多语言表格并将其保存为 csv。 但是无论我用 encoding=utf-8 做什么,我得到一个 BOM 写入的 csv 文件的结果是一样的。 在抓取和保存 HTML 时,是否有任何简单的方法可以使用简单的选项来更改它? (我把 utf-8 改成了 euc-** 选项,因为目标网站是用多国语言编写的,但它是徒劳的)

soup=bs(res.text,'html.parser',from_encoding='utf8')

    resultset = soup.find('table',class_="type_12345")

    print(resultset)
    records=[]
    for tr in resultset.find_all('tr'):
        tds = tr.find_all('td')
        #url = tds[2].a.get('href')
        records.append([elem.text.encode('utf8') for elem in tds])


    with open('whystillBOM.csv', 'a',encoding="utf-8-sig") as f:
        writer = csv.writer(f)
        writer.writerows(records)

【问题讨论】:

    标签: python csv web-scraping utf-8 beautifulsoup


    【解决方案1】:

    'utf-8-sig' 编码会自动为 Microsoft 的 UTF-8 版本写入 BOM。如果您不需要 BOM,只需使用 UTF-8。

    如果您正在读取的文件可能包含 BOM,那么您可以将它们解码为 utf-8-sig,标准 UTF-8 仍将被正确解码。

    【讨论】:

    • 感谢您的回答!即使我在上面的代码中将所有内容都更改为 UTF8,它仍然会写入 BOM 文件。这是什么原因?谢谢
    • 您是否使用了新的输出文件?仅附加到现有 csv 不会从文件开头删除 BOM。如果不是这样,也许您可​​以edit 您的问题包括一些数据,这些数据在您的代码运行时会产生此结果(minimal reproducible example)。
    猜你喜欢
    • 2014-05-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    相关资源
    最近更新 更多