Python - 序列化HTML并输出为JSON
问题描述:
我有一个显示几个值的HTML页面。我还有一个小应用程序,用于显示我拥有的其他一些页面的数据,但这些其他页面是JSON,而不是HTML。 我想从HTML页面使用这些值,转换为JSON,然后输出。Python - 序列化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”,然后标签“名称”和“数字”。
谢谢。
答
如果您确实需要使用Python解析HTML页面,则应该使用Beautiful Soup。我质疑你是否真的应该这样做。 HTML页面和JSON输出是否使用相同的Django实例?他们都是同一个项目的一部分吗?
如果他们是除了相同的项目,那么你可以使用像django-piston这是一个RESTful框架的Python。这将允许您定义应该公开的数据,并以多种格式输出,如HTML/Django Template,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阅读器可以解析它。这是“美丽的汤”吗?我之前听说过,看过一些例子,但从未用过它。 – eoinzy 2011-04-11 13:31:23
美丽的汤是解析HTML或XML结构。它甚至可以根据您的策略处理格式错误的HTML(非关闭块)。但是,请仔细观察一下。 – 2011-04-11 13:48:41