0

次のコードを使用して、html テーブルの結果を解析するにはどうすればよいですか? 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>

そして、予想される結果は、名前inUseフィールドの結果を取得します。これは、"result name" と "false" です。

4

1 に答える 1

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をより創造的に使用し、入力チェックを追加する必要があります。

于 2013-05-06T17:02:18.130 に答える