Python - 使用'continue'循环遍历FOR语句(Craigslist发布)

时间:2017-02-19 17:16:45

标签: python for-loop xpath iteration continue

我正在尝试在单个Craiglist公寓发布中的属性表中查找特定的文本短语('w / d in unit')。此短语的位置可能会有所不同,具体取决于该表中列出的其他属性数量。例如,'w / d in unit'可能位于:

  1. 在第3位:

    • 猫很好;
    • 狗没事;
    • w / d in unit
  2. 在第2位:

    • 猫很好;
    • 单位w / d;
    • 公寓
  3. 为了解释位置的可变性,我编写了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
    

    我的问题是:

    1. 当语句item["WasherDryer"]为false时,如何让if 'w/d in unit' in attr[i].xpath("text()").extract():存储值“无”?
      我可以将它放在else语句(where item["WasherDryer"] = "None")下,但循环不会继续迭代到下一个i

2 个答案:

答案 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"