【问题标题】:Python - Serialise HTML and output as JSONPython - 序列化 HTML 并输出为 JSON
【发布时间】:2011-08-02 15:55:41
【问题描述】:

我有一个显示一些值的 HTML 页面。我还有一个小应用程序,可以显示我拥有的其他一些页面的数据,但这些其他页面是 JSON,而不是 HTML。 我想从 HTML 页面使用这些值,转换为 JSON,然后输出。

我想这样做的原因是我可以简单地重用我的代码,只需更改 URL,甚至动态创建它。

我使 HTML 页面尽可能简单,以便去除所有垃圾,使正则表达式更基本。

这里是 HTML:

<div class="BlockA">
    <h4>BlockA</h4>
    <div class="name">John Smith</div>
    <div class="number">2</div>
    <div class="name">Paul Peterson</div>
    <div class="number">14</div>
</div>

<div class="BlockB">
    <h4>BlockB</h4>
    <div class="name">Steve Jones</div>
    <div class="number">5</div>
</div>

这两个块的元素数量会有所不同,具体取决于几个因素。

这是我的蟒蛇:

def index(request, toGet="xyz"):
    file = urllib2.urlopen("http://www.mysite.com/mypage?data="+toGet)
    data = file.read()
    dom = parseString(data)
    rows = dom.getElementsByTagName("BlockA")[0]
    readIn = ""
    for row in rows:
        readIn = readIn+json.dumps(
            {'name': row.getAttribute("location"),
            'number': row.getAttribute("number")},
            sort_keys=True,
            indent=4)+","
    response_generator = ( "["+readIn[:-1]+"]" )
    return HttpResponse(response_generator)

所以这基本上是读取值(实际上,在这种情况下,源是 XML),循环它们,并输出所有值。

如果有人能指出我正确的方向,将不胜感激。例如,读取“BlockA”等标签,然后读取“name”和“number”标签。

谢谢。

【问题讨论】:

    标签: python html django json


    【解决方案1】:

    如果你真的需要用 Python 解析 HTML 页面,你应该使用Beautiful Soup。我质疑你是否真的应该这样做。 HTML 页面和 JSON 输出是否使用相同的 Django 实例?它们都属于同一个项目吗?

    如果它们在同一个项目中,那么您可以使用django-piston 之类的东西,它是python 的一个RESTful 框架。这将允许您定义应该公开的数据,并以多种格式输出,例如 HTML/Django 模板、JSON、XML 或 YAML。您还可以创建自己的发射器以不同格式输出。

    这样,您可以将特定 URL 公开为常规模板,或者获取与 JSON 相同的数据,这将比 HTML 更容易解析。

    抱歉,如果我误解了您的问题。但这听起来确实像是您想将视图公开为几种不同的格式,而 RESTful 框架将对此有所帮助。

    【讨论】:

    • 我实际上已经在我的 views.py 中定义了 2 个“视图”,它们从 2 个 xml 文件(1 个本地文件,1 个远程文件)中获取数据。这将是我的第三个观点。例如,我有 mysite.com/view1/21、mysite.com/view2/12 和 myste.com/view3/{string}。 “字符串”视图就是这个,所以我已经在使用 REST,我需要做的只是输出 HTML,以便我的 JSON 阅读器可以解析它。这就是“美汤”的目的吗?我以前听说过,也看过一些例子,但从未使用过。
    • beautiful soup 用于解析 HTML 或 XML 结构。它甚至可以根据您的策略处理格式错误的 HTML(非关闭块)。但是,是的,请看一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2011-08-19
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多