2017-09-04 47 views
1

我有這個代碼,其結果表颳了一張桌子,勝利者以紅色字體突出顯示,失敗者只是文本。這是我正在刮的網站link
這是它的外觀:Python Scrapy:如果xpath不存在,如何不返回任何內容?

winner_2 = selector.xpath('.//table[1]/tr[3]/td[4]/font/text()').extract()[0] 
loser_2 = selector.xpath('.//table[1]/tr[3]/td[4]/text()').extract()[0] 
print (winner_2 + loser_2) 

這是什麼出來:

New Zealand v Australia 

但有時沒有贏家,沒有輸家(即並列)和整個文本不只是文本一種字體。在這種情況下,它返回IndexError:列表索引超出範圍(因爲字體文本不存在)而失敗者都是團隊,這正是我需要的。
我該如何做到這一點,以便檢查是否存在贏家,如果不存在贏家,則打印輸出者?

回答

3

在這種情況下,我會用extract_first()

winner_2 = selector.xpath('.//table[1]/tr[3]/td[4]/font/text()').extract_first() 
loser_2 = selector.xpath('.//table[1]/tr[3]/td[4]/text()').extract_first() 
if winner_2 and loser_2: 
    print(winner_2 + loser_2) 
else: 
    print(loser_2) 

這樣我們避免了IndexError。如果有任何數據丟失,它將是None,這是合乎邏輯的,我猜。

+0

我的大腦是烤麪包 – AK47

+0

是的,就像一個魅力。只需要添加到末尾'else:print(loser_2)'。謝謝編輯:好像你已經做到了,謝謝 –

2

或者,注意到拆分項以空白結束或以空白開始,您可以通過這種方式來完成。

>>> import requests 
>>> page = requests.get('http://www.lassen.co.nz/pickandgo.php?fyear=q&teama=NZL#hrh').content 
>>> from scrapy.selector import Selector 
>>> selector = Selector(text=page) 
>>> for item in selector.xpath('.//td[@class="lftblu"]/text()'): 
...  if item.extract().startswith(' ') or item.extract().endswith(' '): 
...   continue 
...  item.extract() 
...  
'New Zealand v British Isles'