2013-01-12 100 views
0

即時嘗試匹配來自html輸出的一些數據,但我不知道我能做些什麼來執行它的權利。因此,使用下面的代碼塊IM中提取的訪問和組信息的內容:從HTML表格解析結果

import requests 
import lxml.etree as LE 
import lxml.html as LH 

url = "http://theurl" 
r = requests.get(url,auth=('user', 'pass')) 
html = r.text 

root = LH.fromstring(html) 
LE.strip_tags(root, 'b') 
data_list = root.xpath("""//td[text()='grouplist'] 
          /following-sibling::*""")[0] 

accessList= data_list.xpath("""//td[text()='access'] 
           /following-sibling::*/text()""") 

groups = data_list.xpath("""//td[text()='groups'] 
           /following-sibling::*/text()""") 

如果我打印accesslist中,我有我想要的數據:

print accessList 
['Administrators', 'group_a', 'group_b', 'group_c'] 

但是當我打印組,返回的結果將是:

print groups: 
['\n','\n','\n'] 

有了這樣的信息,有什麼事情才能做才能得到:

print groups 
['group_a', 'group_b', 'group_c'] 

在這裏,你可以看到返回的HTML導致

<TABLE bgcolor="#dddddd" border="1" /> 
<TR> 
    <TD valign="top"><B>grouplist</B></TD> 
    <TD> 
     <TABLE /> 
<TR> 
    <TD> 
     <TABLE bgcolor="#dddddd" border="1" /> 
<TR> 
    <TD valign="top"><B>access</B></TD> 
    <TD>Administrators</TD> 
</TR> 
<TR> 
    <TD valign="top"><B>inUse</B></TD> 
    <TD>true</TD> 
</TR> 
<TR> 
    <TD valign="top"><B>groups</B></TD> 
    <TD> 
     <TABLE> 
     <TR> 
      <TD>group_a</TD> 
     </TR> 
     <TR> 
      <TD>group_b</TD> 
     </TR> 
     <TR> 
      <TD>group_c</TD> 
     </TR> 
     </TABLE> 
    </TD> 
</TR> 
<TR> 
    <TD valign="top"><B>deny</B></TD> 
    <TD> 
     <TABLE> 
     </TABLE> 
    </TD> 
</TR> 

編輯:提前 html tester

感謝:HTML代碼可以在這裏進行測試。

+0

什麼是'LH'?什麼是'LE'?請提供工作代碼片段,而不是沒有提供進一步細節的代碼片段。 –

+0

@CRUSADER,感謝您指出這一點。 le和lh是lxml.etree和lxml.html。現在添加在主要問題上。 –

回答

1
groups = data_list.xpath("""//td[text()='groups'] 
           /following-sibling::td/table/tr/td/text()""") 

,或者少一點而言,

groups = data_list.xpath("""//td[text()='groups'] 
           /following-sibling::*//td/text()""") 

作品。如果過於具體你的目的,你可以改爲定義groups這樣:

groups = data_list.xpath("""//td[text()='groups'] 
           /following-sibling::*""")[0] 

然後用text_content

groups = groups.text_content().split() 

不過,將在空白的文本內容可能不是很好,如果group_agroup_b和/或group_c被本身包含空格的文本替換。

+0

再次感謝unutbu。是的,這是特定的情況下,但我有很多其他的HTML結果適合該模式匹配。 –