Python Scrapy:如果xpath不存在,如何不返回任何内容?

时间:2017-09-04 15:00:52

标签: python python-3.x xpath scrapy

我有这个代码用表格搜索表格,胜利者用红色字体突出显示,输家只是文字。以下是我正在抓取的网站的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的赢家:列表索引超出范围(因为带有字体的文本不存在),输家是两个团队,这就是我需要的。
如何才能检查胜利者是否存在,如果胜利者不存在,那么打印出失败者?

2 个答案:

答案 0 :(得分: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,这是合乎逻辑的,我猜。

答案 1 :(得分: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'