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框架将对此有所帮助。

+0

我实际上已经在我的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

+0

美丽的汤是解析HTML或XML结构。它甚至可以根据您的策略处理格式错误的HTML(非关闭块)。但是,请仔细观察一下。 – 2011-04-11 13:48:41