0

次のコードを使用して、HTML出力からすべてのデータを取得しようとしています。

proxy_auth = "http://"+proxyUser+":"+proxyPass+"@"+proxyHost
proxy_handler = urllib2.ProxyHandler({"http": proxy_auth})
opener = urllib2.build_opener(proxy_handler)
opener = urllib2.build_opener()
urllib2.install_opener(opener)

request = urllib2.Request("http://"+iserver+"/invoke/pub.art/listRegisteredAdapters")
base64string = base64.encodestring('%s:%s' % (login, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
response = urllib2.urlopen(request)
html = response.read()

doc = LH.fromstring(html)
tds = (td.text_content() for td in doc.xpath("//td"))

print html

for td, val in zip(*[tds]*2):
    if td == "adapterTypeName" :

        adapterTypeName=val
        print adapterTypeName

これは元のhtml出力です。

<BODY bgcolor=#dddddd>
<TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>registeredAdapterList</B></TD>
<TD>
<TABLE>
<TR>
<TD><TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>adapterTypeName</B></TD>
<TD>SAPAdapter</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD><TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>adapterTypeName</B></TD>
<TD>SMSCAdapter</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD><TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>adapterTypeName</B></TD>
<TD>PRTServerAdapter</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD><TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>adapterTypeName</B></TD>
<TD>com.vf.bdp.BDPAdapter</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD><TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>adapterTypeName</B></TD>
<TD>SiebelAdapter</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD><TABLE bgcolor=#dddddd border=1>
<TR>
<TD valign="top"><B>adapterTypeName</B></TD>
<TD>JDBCAdapter</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</BODY>

私が期待していたのは、次のフィールドを取得することでした。

SAPAdapter
SMSCAdapter
PRTServerAdapter
com.vf.bdp.BDPAdapter
SiebelAdapter
JDBCAdapter

代わりに、私は受け取るだけです:

SMSCAdapter
com.vf.bdp.BDPAdapter
JDBCAdapter

Pythonは初めてなので、ここで何が間違っている可能性があるのか​​わかりません。

4

1 に答える 1

1

問題はxpath式にありますが、これは許容範囲が広すぎます。
それはあなたが実際に見つけたくない要素を見つけることです。
結果を印刷して、私が話していることを確認してください。

子要素を含まないすべてのtd要素のテキストを検索したいようです。
これを行う簡単な方法は次のとおりです。

doc = LH.fromstring(html)
for td in doc.xpath('//td[not(*)]/text()'):
    print td
于 2012-08-17T20:59:14.400 に答える