gpt4 book ai didi

python - 在 python 中使用格式错误的 JSON 抓取页面

转载 作者:行者123 更新时间:2023-12-01 05:06:17 24 4
gpt4 key购买 nike

我正在抓取网页中的数据,其格式如下:

<!-- Web header up here -->
[{"foo": "Bar", "foo2": "Bar2"},
{"foo3": ["hello", "world"], "foo4": "Bar4"},
...
]
<!-- Web footer here -->

问题是 JSON 与其他内容一起出现在页面上,并且页面源在引号内包含 JSON 列表,在“pre”标签内,在 JSON 中包含其他 html 标签,如下所示:

<pre>" [{ "foo": "Bar", <p>"foo2": "Bar2"</p>}, ... ] "</pre>

有什么方法可以绕过这种糟糕的格式并获取给定 JSON 对象字符串的 JSON 对象列表,最好摆脱过程中的嵌入标签?

编辑:我现在已经按照 Mauricio 的建议安装并开始学习 BeautifulSoup4,但我仍然有些不足。在“汤”上使用 .pre 运算符可以得到

<pre> [{ ... (Good formatted JSON but inside tags still) ...}]</pre>

HTML:(<pre> 代码仅在其上方和下方有一些标题。)

<pre>
[{
"title": “blah”,
"refs": [“a”, “a”],
"description": [“a”,
“a”,
"a”],
“a”: [
{“a”: “a"}]
},
{
"title": “a”,
"refs": [“a”, “a”],
"description": [“a”,
“a”,
“a”],
“a”: [
{“a”: “a”}]
}]
</pre>

最佳答案

您需要获取.textstrip()引号和空格。

然后,您可以使用json.loads()加载 json 字符串:

import json
from bs4 import BeautifulSoup


data = """
<div>
<pre>" [{ "foo": "Bar", <p>"foo2": "Bar2"</p>}] "</pre>
</div>
"""

soup = BeautifulSoup(data)

json_data = soup.pre.text.strip('" ')
print json.loads(json_data)

打印:

[{u'foo': u'Bar', u'foo2': u'Bar2'}]
<小时/>

还有一个问题 - pre 中的引号不正常,您应该替换它们:

# -*- coding: utf-8 -*-

import json
from bs4 import BeautifulSoup


data = u"""
<div>
<pre>
[{
"title": “blah”,
"refs": [“a”, “a”],
"description": [“a”,
“a”,
"a”],
“a”: [
{“a”: “a"}]
},
{
"title": “a”,
"refs": [“a”, “a”],
"description": [“a”,
“a”,
“a”],
“a”: [
{“a”: “a”}]
}]
</pre>
</div>
"""

soup = BeautifulSoup(data)

json_data = soup.pre.text.encode('utf-8').strip('" ').replace('“', '"').replace('”', '"')
print json.loads(json_data)

打印:

[{u'a': [{u'a': u'a'}], u'refs': [u'a', u'a'], u'description': [u'a', u'a', u'a'], u'title': u'blah'}, 
{u'a': [{u'a': u'a'}], u'refs': [u'a', u'a'], u'description': [u'a', u'a', u'a'], u'title': u'a'}]

关于python - 在 python 中使用格式错误的 JSON 抓取页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com