1

次の構造のhtmlテーブルを解析する必要があります。

<table class="table1" width="620" cellspacing="0" cellpadding="0" border="0">
 <tbody>
   <tr width="620">
     <th width="620">Smth1</th>
     ...
   </tr>
   <tr bgcolor="ffffff" width="620">
     <td width="620">Smth2</td>
     ...
   </tr>
   <tr bgcolor="E4E4E4" width="620">
     <td width="620">Smth3</td>
     ...
   </tr>
   <tr bgcolor="ffffff" width="620">
     <td width="620">Smth4</td>
     ...
   </tr>
 </tbody>
</table>

Pythonコード:

r = requests.post(url,data)
html = lxml.html.document_fromstring(r.text)
rows = html.xpath(xpath1)[0].findall("tr")
#Getting Xpath with FireBug
data = list()
for row in rows:
    data.append([c.text for c in row.getchildren()])

しかし、私はこれを3行目に取得します。

IndexError: list index out of range

タスクは、これからpythondictを形成することです。行数は異なる場合があります。

UPD。 リクエストlibで発生する可能性のある問題を回避するために、htmlコードの取得方法を変更しました。これで、単純なURLになります。

html = lxml.html.parse(test_url)

これは、すべてがhtmlでOKであることを証明します。

lxml.html.open_in_browser(html)

しかし、それでも同じ問題:

rows = html.xpath(xpath1)[0].findall('tr')
data = list()
for row in rows:
    data.append([c.text for c in row.getchildren()])

これがxpath1です:

'/html/body/table/tbody/tr[5]/td/table/tbody/tr/td[2]/table/tbody/tr/td/center/table'

UPD2。実験的に、xpathが次の場合にクラッシュすることが判明しました。

xpath1 = '/html/body/table/tbody'
print html.xpath(xpath1)
#print returns []

xpath1が短い場合は、正常に機能しているように見え[<Element table at 0x2cbadb0>]xpath1 = '/html/body/table'

4

2 に答える 2

5

XPathが含まれていなかったため、何をしようとしているのかわかりませんが、正しく理解していれば、これは機能するはずです。

xpath1 = "tbody/tr"
r = requests.post(url,data)
html = lxml.html.fromstring(r.text)
rows = html.xpath(xpath1)
data = list()
for row in rows:
    data.append([c.text for c in row.getchildren()])

これは、次のように1つのアイテムリストのリストを作成しています。

[['Smth1'], ['Smth2'], ['Smth3'], ['Smth4']]

値の簡単なリストを作成するには、このコードを使用できます

xpath1 = "tbody/tr/*/text()"
r = requests.post(url,data)
html = lxml.html.fromstring(r.text)
data = html.xpath(xpath1)

これはすべて、r.textがまさにあなたがそこに投稿したものであると仮定しています。

于 2013-01-18T00:20:01.363 に答える
0

.xpath(xpath1)XPath式で要素が見つかりませんでした。その式にエラーがないか確認してください。

于 2013-01-17T22:45:47.523 に答える