2015-12-05 80 views
2

問題:Python的LXML.HMTL的XPath返回空列表

  • date_list是一個空列表。

  • 不應該爲空,因爲列表長度應該等於列表長度octfiling_type_list

我做了什麼:

  1. 搜索錯別字。

  2. 嘗試過不同的公司(例如REXAHN PHARMACEUTICALS,INC)。

  3. 對Xpath參數使用了不同的詞。

代碼:

filing_dates_pg = requests.get('http://csuite.xbrl.us/php/dispatch.php?Task=xbrlValues&Element=NetCashProvidedByUsedInOperatingActivitiesContinuingOperations&CIK=0001228627&Ultimus=true&DimReqd=false&API_Key=xxxx') 
# The URL easiest to read in FIREFOX Browser. 

Datestree = html.fromstring(filing_dates_pg.text) 
date_list = Datestree.xpath('//periodStart/text()') 
filing_type_list = Datestree.xpath('//period/text()') 
ocf = Datestree.xpath('//amount/text()') 

print ocf    # Works, list matches data in URL page 
print filing_type_list # Works 
print type(date_list) 
print date_list   # Does NOT work 

輸出

['-2977634', '-4566843', '-5146845', '-6986598', '-53917328', '-2425835', '-55897199', '-7490595', '-57546899', '-10651611', '-58620377', '-15530306', '-60171904', '-1916510', '-62675625', '-3896381', '-64356343', '-5546081', '-66605233', '-6619559', '-69181840', '-1551527', '-4055248', '-5735966', '-7984856', '-11041211', '-2576607', '-4038817', '-5527773', '-8441718', '-8129391', '-12944191'] 
['1H', '3QCUM', 'Y', 'Y', '2001-03-19 - 2012-04-01', '1Q', '2001-03-19 - 2012-07-01', '1H', '2001-03-19 - 2012-10-01', '3QCUM', '2001-03-19 - 2013-01-01', 'Y', '2001-03-19 - 2013-04-01', '1Q', '2001-03-19 - 2013-07-01', '1H', '2001-03-19 - 2013-10-01', '3QCUM', '2001-03-19 - 2014-01-01', 'Y', '2001-03-19 - 2014-04-01', '1Q', '1H', '3QCUM', 'Y', 'Y', '1Q', '1Q', '1H', '1H', '3QCUM', '3QCUM'] 
<type 'list'> 
[] 
ValueError: Length mismatch: Expected axis has 0 elements, new values have 1 elements 

回答

1

好像你正在使用lxml.html.fromstring代替lxml.etree.fromstring。使用lxml.etree.fromstring。否則,您需要指定//periodstart/text() xpath表達式(全部小寫),因爲在HTML標記名稱中不區分大小寫。

from lxml import etree 

... 

Datestree = etree.fromstring(filing_dates_pg.text) 
+0

我測試這應該是答案建議! ! – SIslam

+0

Thx,Falsetru。我使用小寫解決方案。 – SAH

0

我在執行過程中也遇到這個問題。

在解析ANS也特性名小case

使用像下面html.fromstring轉換標籤名稱:

>> Datestree.xpath('//periodstart//text()') 

或者也可以通過falsetru使用etree

+0

Thx,Vivek Sable! – SAH