0

編集:私はこの問題を理解するために使用している正確なソースコードを提供しました。

Python 2.7とlxmlを使用して、YahooFinanceから「総資産」に関するデータを抽出しようとしています。この情報を抽出しようとしているページの例は、http://finance.yahoo.com/q/bs ?s = FAST + Balance + Sheet&annualです。

Smartmoneyから「総資産」のデータを正常に抽出しました。解析できるSmartmoneyページの例はhttp://www.smartmoney.com/quote/FAST/?story=financials&timewindow=1&opt=YB&isFinprint=1&framework.view=smi_emptyViewです。

これは、この問題に取り組むために設定した特別なテストスクリプトです。

    import urllib
    import lxml
    import lxml.html 

    url_local1 = "http://www.smartmoney.com/quote/FAST/?story=financials&timewindow=1&opt=YB&isFinprint=1&framework.view=smi_emptyView" 
    result1 = urllib.urlopen(url_local1)
    element_html1 = result1.read()
    doc1 = lxml.html.document_fromstring (element_html1)
    list_row1 = doc1.xpath(u'.//th[div[text()="Total Assets"]]/following-sibling::td/text()')
    print list_row1

    url_local2 = "http://finance.yahoo.com/q/bs?s=FAST" 
    result2 = urllib.urlopen(url_local2)
    element_html2 = result2.read()
    doc2 = lxml.html.document_fromstring (element_html2)
    list_row2 = doc2.xpath(u'.//td[strong[text()="Total Assets"]]/following-sibling::td/strong/text()')
    print list_row2

Smartmoneyページから総資産のデータの行を取得できますが、Yahoo Financeページを解析しようとすると、空のリストしか表示されません。

Smartmoneyページのテーブル行のソースコードは次のとおりです。

    <tr class="odd bold">
<th><div style='font-weight:bold'>Total Assets</div></th>
<td>  1,684,948</td>
<td>  1,468,283</td>                                
<td>  1,327,358</td>                                
<td>  1,304,149</td>                                    
<td>  1,163,061</td>
    </tr>

Yahooページのテーブル行のソースコードは次のとおりです。

    <tr>
<td colspan="2"><strong>Total Assets</strong></td>
<td align="right"><strong>1,684,948&nbsp;&nbsp;</strong></td>
<td align="right"><strong>1,468,283&nbsp;&nbsp;</strong></td>
<td align="right"><strong>1,327,358&nbsp;&nbsp;</strong></td>
    </tr>
4

1 に答える 1

0

構文エラーが含まれています。最後にある必要があります。td/strong/text()さらに、末尾にがあります]。正しいクエリは次のようになります。

xpath('//td[strong[text()="Total Assets"]]/following-sibling::td/strong/text()')

結果:

>>> tree.xpath('//td[strong[text()="Total Assets"]]/following-sibling::td/strong/text()')
[u'1,684,948\xa0\xa0', u'1,468,283\xa0\xa0', u'1,327,358\xa0\xa0']

元のページでは、「TotalAssets」<strong>コンテナに空白と改行があります。次のように、結果に追加のnormalize-space関数を使用します。text()

xpath('//td[strong[normalize-space(text())="Total Assets"]]/following-sibling::td/strong/text()')
于 2012-12-02T07:21:53.207 に答える