2017-08-12 40 views
1

我試圖讓報廢讓統計在此URL Scrapy不返回結果使用XPath

http://www.acb.com/redaccion.php?id=133495

我首先與玩家名稱嘗試:

進口scrapy 進口從scrapy.item請求 import Item,領域 from ligafemanager.items進口LigafemanagerItem

class Lf1Spider(scrapy.Spider): 
    name = 'lf1' 
    allowed_domains = ['acb.com'] 
    start_urls = ['http://www.acb.com/redaccion.php?id=133495'] 
    def parse(self, response): 
    self.logger.info('A response from %s just arrived!', response.url) 
    i = LigafemanagerItem() 
    i['acb_player_name'] = response.xpath('//td/div/codigo/table[1]/tbody/tr/td[2]/font/text()').extract() 
    self.logger.info('------------ACB NAME is: %s ------', 
    i['acb_player_name']) 
    return i 

永不返回結果

回答

0

那麼這是一個棘手的問題,因爲你看到的並不是真實的真相。從螢火蟲

Firebug

考慮HTML現在看到相同的頁面

View Source

在讀強調所有的人都用在Firefox中查看源代碼窗口的錯誤標籤的查看源代碼。另外請注意一個關鍵的問題tbody缺失。這是許多網站發生的情況,HTML中沒有使用tbody,但瀏覽器執行自動更正並添加tbody以在瀏覽器中正確顯示錶格。

當您使用腳本時,tbody不在源代碼中,因爲scrapy不會執行任何自動更正,您的XPATH與tbody不會找到您感興趣的元素。那麼最簡單的解決方案?從您的XPath刪除TBODY

In [3]: response.xpath('//td/div/codigo/table[1]/tr/td[2]/font/text()').extract() 
Out[3]: ['Nombre'] 
+0

首先感謝您的幫助,有一個問題,如果我寫 // TD/DIV/codigo /表/ TR/TD [2] /字體/文本()「)。摘錄() 不會返回所有名稱,只有第一個TR解決方案? –

+0

那麼應該是「// td/div/codigo // table/tr/td [2]/font/text()」您需要使用「//」來匹配任何子節點。因此,而不是使用'/ table'來使用'// table' –