2016-09-27 49 views
1

我試圖從每張收益報表下的表格(資產負債表)中解析一些數據。這裏我以AMD爲例,但不限於AMD。解析收益報表中的表格時出現Python和Scrapy問題

這裏是the link

我現在的問題是,我不能讓任何閱讀 - 我的蜘蛛都是返回空的結果。我使用scrapy shell "http://example.com"來測試我的xpath,我從Google Chrome Inspector直接複製了它,但仍然無法正常工作。

這裏是我的XPath(提供Chrome瀏覽器):

//*[@id="newsroom-copy"]/div[2]/div[8]/table/tbody/tr[9]/td[4]/text() 

這裏是我的代碼:

import scrapy 

class ESItem(scrapy.Item): 
    Rev = scrapy.Field() 

class ESSpider(scrapy.Spider): 
    name = "es" 
    start_urls = [ 
     'http://www.marketwired.com/press-release/amd-reports-2016-second-quarter-results-nasdaq-amd-2144535.htm', 
    ] 

    def parse(self, response): 
     item = ESItem() 
     for earning in response.xpath('//*[@id="newsroom-copy"]/div[2]/div[8]/table/tbody'): 
      item['Rev'] = earning.xpath('tr[9]/td[4]/text()').extract_first() 
      yield item 

我正在尋找在底部檢索從表中的「收數」那個報告。

謝謝!

我使用此命令來運行我的代碼:

scrapy runspider ***.py -o ***.json 

代碼運行正常,沒有錯誤,只是沒有回我真的找。

更新:我有點想出了一些東西......我不得不從XPATH刪除「TBODY」的標籤,這是我不明白...任何人都可以這樣解釋一下好嗎?

+1

你需要從網上刮嗎?有許多金融API已經提供這些信息。 – zhqiat

+0

我的主要目標是學習Scrapy ...所以,是的,我可以使用一些API,但我仍然想知道如何通過我自己來實現它。 :) –

回答

0

chrome中檢查工具提供的html是由瀏覽器解釋服務器發送給您的瀏覽器的實際代碼的結果。

tbody標籤是一個很好的例子。如果你查看一個網站的頁面的源代碼,你會看到這樣

<table> 
    <tr> 
     <td></td> 
    </tr> 
</table> 

的結構現在,如果你檢查的頁面出現這種情況

<table> 
    <tbody> 
     <tr> 
      <td></td> 
     </tr> 
    </tbody> 
</table> 

什麼scrapy得到的是網頁的源文件,而不是「檢查員「,所以無論何時您嘗試選擇頁面中的某些內容,請確保它存在於頁面源代碼中。

另一個這樣的例子是,當你嘗試選擇一些由JavaScript生成的元素,而頁面正在加載。 Scrapy不會得到這個,所以你需要使用別的東西來解釋它,如scrapy-splash或selenium。

請注意,花時間學習xpath和css選擇器。當你知道如何正確查詢元素時,節省時間。

//*[@id='newsroom-copy']/div[2]/div[8]/table/tr[9]/td[4]/text() 

相當於

//table/tr[td/text()='Net revenue']/td[4]/text() 

看看它是如何更漂亮容貌?

+0

太棒了!現在我有了更好的理解。非常感謝! –