次の構造の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'