Skip to main content
 首页 » 编程设计

Python 碎片 : How to return nothing if xpath doesn't exist

2025年05月04日22lidabo

我有这段代码,它可以抓取带有结果的表格,获胜者以红色字体突出显示,失败者只是文本。这是 link到我正在抓取的网站。
这是它的样子:

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: list index out of range(因为带有字体的文本不存在),失败者是两个团队,这正是我需要的。
我怎样才能让它检查是否存在赢家,如果不存在赢家,则打印出输家?

请您参考如下方法:

在这种情况下,我会使用 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,我想这是合乎逻辑的。