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

使用BeautifulSoup提取标签写入文件触发TypeError:需将Tag转为字符串

解决BeautifulSoup中Tag对象转字符串写入文件的问题

错误原因

你碰到的TypeError: write() argument must be str, not Tag,是因为soup.find_all()返回的是BeautifulSoup的Tag对象,而文件的write()方法只接受字符串类型。

为什么elem.text会返回空?

text属性是用来提取标签下的可见文本内容的,而application/ld+json类型的script标签里的内容属于标签的内部字符串,不属于普通可见文本范畴,所以用text拿不到内容。

正确解决方法

有两种常用方式:

  • 如果你需要完整的script标签(包括标签本身和内部JSON内容),直接用str()把Tag对象转成字符串:
    file.write(str(elem))
    
  • 如果你只需要script标签里的JSON内容,用elem.string获取标签内部的字符串(加个判断避免空标签报错):
    if elem.string:
        file.write(elem.string)
    

文档对应位置

在BeautifulSoup文档的**「NavigableString」章节,会介绍Tag对象的string属性用于获取标签包含的单个字符串;另外在「Tag对象」**章节,说明可以直接将Tag对象转换为字符串(Python的str()函数会调用Tag的__str__方法,返回对应的HTML字符串)。

修改后的完整代码

from bs4 import BeautifulSoup

# 用with语句自动管理文件,不用手动close
with open("meetup.html", "r") as html_file:
    soup = BeautifulSoup(html_file, 'html.parser')

with open('myfile.txt', 'w') as output_file:
    for elem in soup.find_all(attrs={"type": "application/ld+json"}):
        # 只写入内部JSON内容
        if elem.string:
            output_file.write(elem.string)
        # 若要写入完整script标签,替换成下面这行
        # output_file.write(str(elem))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:43:13