2011-04-10 54 views
0

我有一個顯示幾個值的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」,然後標籤「名稱」和「數字」。

謝謝。

回答

2

如果您確實需要使用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