将'bs4.element.NavigableString'转换为json

1 投票
1 回答
1862 浏览
提问于 2025-04-18 15:14

我需要把一个 bs4.element.NavigableString(这是来自Beautiful Soup的一个东西:http://www.crummy.com/software/BeautifulSoup/bs4/doc/#navigablestring)转换成一个json字符串。

我正在使用Beautiful Soup进行网页抓取,返回的结果看起来像是一个json对象,格式大概是这样的(没有美化过的格式):

my_object = {"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

我尝试用普通的json方法去查找 my_object,但是没有成功,也试过用Beautiful Soup的方法去查找它。我还查过怎么把 bs4.element.NavigableString 转换成json。

谢谢你的帮助!

1 个回答

1

嗯,这个字符串不是有效的JSON格式。其中的一部分是有效的JSON。

具体来说,它是一行JavaScript代码,这行代码把一个恰好写成有效JSON格式的JavaScript字面量赋值给了一个叫my_object的变量。

如果你想解析这个JSON,你需要把它从其他部分分离出来。比如:

s = '''my_object = {"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}'''
jsvar, _, jsvalue = s.partition('=')
value = json.loads(jsvalue)

撰写回答