我正在尝试在单个Craiglist公寓发布中的属性表中查找特定的文本短语('w / d in unit')。此短语的位置可能会有所不同,具体取决于该表中列出的其他属性数量。例如,'w / d in unit'可能位于:
在第3位:
在第2位:
为了解释位置的可变性,我编写了Python代码:
attr = response.xpath("//*[@class='attrgroup']/span")
for i in range (0, len(attr)):
if 'w/d in unit' in attr[i].xpath("text()").extract():
item["washerDryer"] = attr[i].xpath("text()").extract()
else:
continue
return item
我的问题是:
item["WasherDryer"]
为false时,如何让if 'w/d in unit' in attr[i].xpath("text()").extract():
存储值“无”?else
语句(where item["WasherDryer"] = "None")
下,但循环不会继续迭代到下一个i
。答案 0 :(得分:1)
您可以使用extract_first并向其传递默认值。 以下是它的使用方法:
for i in range (0, len(attr)):
item["washerDryer"] = attr[i].xpath("text()").extract_first(default='None')
答案 1 :(得分:0)
我昨天修改了原始代码。我意识到在进行迭代之前我首先需要确定文本'w / d in unit'是否存在。
我们在这里做的是:
1)查看“w / d in unit”文本是否出现在字符串'attr'中的任何位置 2)如果是,则继续迭代 3)如果否,则自动标记项目['washerDryer'] ='无'
if 'w/d in unit' in str(attr):
for i in range (0, len(attr)):
if 'w/d in unit' in attr[i].xpath("text()").extract():
item["washerDryer"] = attr[i].xpath("text()").extract()
else:
continue
else:
item["washerDryer"] = "None"