0

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コードはここでテストできます:htmlテスター

前もって感謝します。

4

1 に答える 1

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_a、うまく機能しない可能性があります。group_bgroup_c

于 2013-01-12T11:29:20.177 に答える