Python - 串行化HTML并输出为JSON

时间:2011-04-10 21:43:24

标签: python html django json

我有一个显示一些值的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>

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

这是我的python:

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”。

感谢。

1 个答案:

答案 0 :(得分:2)

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

如果他们 分开同一个项目,那么你可以使用类似django-piston的东西,这是一个用于python的RESTful框架。这将允许您定义应公开的数据,并以多种格式输出,如HTML / Django Template,JSON,XML或YAML。您还可以创建自己的发射器,以便以不同的格式输出。

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

对不起,如果我误解了你的问题。但它确实听起来像是要将视图公开为几种不同的格式,而RESTful框架将有助于此。