2012-11-14 25 views
1

我是Python新手,需要一些幫助。網絡不是很有幫助。簡單地說,我有一個Web響應,看起來像這樣:如何將XML結果分析到數組中?

<html> 
    <field>123</field> 
    <field>456</field> 
</html> 

我試圖做的是採取一切從域元素的內容到一個數組,我可以索引。最終的結果是這樣的:

myArray[0] = 123 
myArray[1] = 456 

等等...

什麼我要結束了這個做的是運行一個隨機數發生器隨機選擇的要素之一這個數組並檢索它的值。

這可能嗎?我似乎無法在網上找到直接的答案,所以我覺得我可能會要求錯誤的東西。

回答

1

我會使用XPath Xpath python解析值並將它們插入到列表中,首先聲明並清空my_list=[],然後僅附加值my_list.append(parsed_value)

+0

這足以讓我滾動,謝謝!現在明白了。 – Sinaesthetic

1

到目前爲止,從HTML中提取信息的最簡單方法是BeautifulSoup。這裏有一個片段,以獲得您想要的清單:既然你是新來的Python

>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup(html_text) 
>>> fields = [int(el.text) for el in soup.find_all("field")] 
>>> fields 
[123, 456] 

  1. 我們importbs4模塊(您將需要安裝BeautifulSoup類 - 見上面的鏈接)。
  2. 我們從html_text創建了一個名爲soupBeautifulSoup實例。
  3. 我們創建一個名爲fields列表,使用列表理解:
    • 轉換的eltextint埃格爾
    • for每個el
    • ,我們通過查找所有field元素soup
    得到
-2

看st andart模塊! http://docs.python.org/2/library/htmlparser.html#examples

,如果你需要這個只有從問題的情況下,試試這個 它取代所有標籤與' '(空間),str.split分裂由一個或多個空格,導致文字定界符

import re 
def get_data(str_data): 
    return re.sub(r'<.*?>',' ', str_data).split() 

str_data = """<html> 
    <field>123</field> 
    <field>456</field> 
</html>""" 

print get_data(str_data) # prints "['123', '456']" 

對不起,我的英語

+0

正則表達式是一個[臭名昭着的]脆弱的方式來解析HTML ...(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)...而這個答案依賴於響應中根本沒有其他內容,這似乎不太可能。 –

+0

@ZeroPiraeus我說'如果你只需要這個案例'。當然,RE對xml不好,但我相信KISS。如果有簡單的方法去做,爲什麼安裝怪物模塊? – akaRem

5

如果你正在做這樣簡單的事情,你可能想看看內置到Python中的ElementTree模塊。您不需要額外安裝任何東西,其全部包含在python中

import xml.etree.ElementTree as ET 

filename='data.txt' 
tree = ET.parse(filename) 
root = tree.getroot() 
myArray=[] 

for x in root.findall('field'): 
    myArray.append(x.text) 

print(myArray) 
相關問題