Python - 将HTML序列化并输出为JSON
我有一个HTML页面,上面显示了一些值。同时,我还有一个小应用程序,可以显示我其他页面的数据,但那些页面是JSON格式的,不是HTML。
我想从这个HTML页面获取这些值,把它们转换成JSON格式,然后输出。
这样做的原因是我可以简单地重用我的代码,只需要更改网址,或者甚至动态生成网址。
我把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 个回答
2
如果你真的需要在Python中解析一个HTML页面,建议你使用Beautiful Soup这个工具。不过我有点怀疑你是否真的需要这样做。你要解析的HTML页面和JSON输出是用同一个Django实例生成的吗?它们都是同一个项目的一部分吗?
如果它们确实是同一个项目的一部分,那么你可以使用像django-piston这样的工具,它是一个为Python设计的RESTful框架。这个框架可以让你定义哪些数据需要被公开,并且可以输出成多种格式,比如HTML/Django模板、JSON、XML或YAML。你还可以创建自己的输出方式,以便输出成其他格式。
这样的话,你就可以把一个特定的URL当作普通模板来使用,或者获取相同的数据以JSON格式输出,这样解析起来会比HTML简单得多。
如果我误解了你的问题,真是抱歉。不过听起来你确实想把一个视图以多种不同格式公开,而使用RESTful框架会对你有帮助。