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