2016-11-08 9 views
-1

私はプロジェクトに取り組んでいます。別のWebページの別のテーブルから在庫データを取り出すようにlxmlを設定しようとしています。私はプルしようとしている値を印刷しようとしている私のプログラムを実行すると、私は、空のブラケットを得るXpathが値を返さないlxml Python

('Cash_and_short_term_investments:', []) 
('EPSNextYear:', []) 

ここで私はこの呼び出しています方法を見ている:

#the url at this point is http://finviz.com/quote.ashx?t=RAIL confirmed with print statement 
    url = driver.current_url 
    page2 = requests.get(url) 
    tree2 = html.fromstring(page2.content) 
    EPSNextYear =    
    tree2.xpath('/html/body/table[3]/tr[1]/td/table/tr[7]/td/table/tr[2]/td[6]/b') 
    #Original XPath:/html/body/table[3]/tbody/tr[1]/td/table/tbody/tr[7]/td/table/tbody/tr[2]/td[6]/b 
    print ('EPSNextYear:', EPSNextYear) 

と:

#the url at this point is https://www.google.com/finance?q=NASDAQ%3ARAIL&fstype=ii&ei=hGwhWNHVPOW7iwLMiIfIDA I've confirmed this with a print 
url = driver.current_url 
page3 = requests.get(url) 
tree3 = html.fromstring(page3.content) 
Cash_and_Short_Term_Investments = tree3.xpath('//*[@id="fs-table"]/tr[3]/td[2]/text()') 
print('Cash_and_short_term_investments:', Cash_and_Short_Term_Investments) 

いくつか同様の質問が示唆しているように、私はXPathからtbodyを削除しました。どんな助けや提案も大変ありがとうございます。

答えて

0

このような質問をするときには、問題を示す短い完全な例を提供する必要があります。

2番目の例を見ると、使用しているXPath式が間違っていることが明らかです。 XPathからtbody要素が欠落しています。 (そして、あなたは、あなたが検索している実際の文字列を検索することで、正しいテーブルの行を選択したい場合があります。)

は、次のコードを考える:

> python test.py 
:そうのようにこれを実行している場合は

from lxml import etree 
import urllib 

url="http://www.google.com/finance?q=NASDAQ%3ARAIL&fstype=ii&ei=hGwhWNHVPOW7iwLMiIfIDA" 
parser = etree.HTMLParser() 
tree = etree.parse(urllib.urlopen(url), parser) 
result = tree.xpath('//*[@id="fs-table"]/tbody/tr[normalize-space(td) = "Cash and Short Term Investments"]') 
for x in result: print etree.tostring(x) 

あなたは次のような出力を得る:私はあなたが何を私を把握することができます確信している

<tr> 
<td class="lft lm">Cash and Short Term Investments 
</td> 
<td class="r">39.78</td> 
<td class="r">78.45</td> 
<td class="r">91.21</td> 
<td class="r">110.02</td> 
<td class="r rm">125.01</td> 
</tr> 

<tr> 
<td class="lft lm">Cash and Short Term Investments 
</td> 
<td class="r">110.02</td> 
<td class="r">161.49</td> 
<td class="r">184.49</td> 
<td class="r rm">140.49</td> 
</tr> 

をあなたの最初の例を間違えてしまったのです

+0

これは文字列を取得するのに良い解決策です。正規表現を使ってRegexを使って数値を分離しました。 – Marc

関連する問題