2013-05-06 49 views
0

使用下面的代碼我如何解析html表格結果? html的一個例子可以在前面找到。從lxml的HTML表格中獲取結果

import requests 
from lxml import etree 
import StringIO 

def http_request(): 

    try: 
     url = "http://somehost/somehtml.html" 
     r = requests.get(url, auth=("theUser", "thepass")) 
     r.encoding ='ISO-8859-1' 
     html = r.content 
     parse_result(html) 
    except requests.HTTPError, e: 
     return False 
     sys.exit(1) 

def parse_result(result): 
    parser = etree.HTMLParser() 
    tree = etree.parse(StringIO.StringIO(result), parser) 

    # Here should be the logic to parse the html result :) 


if __name__ == '__main__': 
    http_request() 

這是HTML:

<!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 Strict//EN" 
    "http://www.w3.org/tr/xhtml1/Dtd/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta name="generator" content= 
    "HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org" /> 

    <title></title> 
</head> 

<body> 
    <table border="1"> 
    <tr> 
    <td valign="top"><B>name</B></td> 
    <td>result name a</td> 
    </tr> 
    <tr> 
    <td valign="top"><B>inUse</B></td> 
    <td>false</td> 
    </tr> 
    </table> 
    <table border="1"> 
    <tr> 
    <td valign="top"><B>name</B></td> 
    <td>result name b</td> 
    </tr> 
    <tr> 
    <td valign="top"><B>inUse</B></td> 
    <td>false</td> 
    </tr> 
    </table> 
    <table border="1"> 
    <tr> 
    <td valign="top"><B>name</B></td> 
    <td>result name c</td> 
    </tr> 
    <tr> 
    <td valign="top"><B>inUse</B></td> 
    <td>true</td> 
    </tr> 
    </table> 
</body> 
</html> 

和預期resould將檢索INUSE域結果,至極是 「結果名稱」 和 「假」 。

在此先感謝。

回答

0

假設你在拉動HTML具有正是格式:

nodes = etree.XPath("/html/body/table") 
for node in nodes(tree): 
    print '%s %s' % (node[0][1].text, node[1][1].text) 

從你的樣本HTML,輸出:

result name a false 
result name b false 
result name c true 

如果格式是要改變的外示例html,您可能需要在XPath上更具創意,並添加更多輸入檢查。

+0

嗨, 與真正的例子它的命名和inuse輸出量的主要區別。有超過200個結果。 – 2013-05-06 17:40:27

+0

它是否與'inUse'行在所有結果的'name'行之後有相同的形式? – MichaelJCox 2013-05-06 17:51:36

+0

我會通過在表中添加更多條目來提出問題 – 2013-05-07 11:06:24