2017-02-19 15 views
1

Я пытаюсь найти конкретную текстовую фразу ('w/d in unit') в таблице атрибутов в отдельной записи объявления Craiglist. Позиция этой фразы может варьироваться в зависимости от того, сколько других атрибутов указано в этой таблице. Например, 'ж/д в блоке' могут быть расположены:Python - цикл через оператор FOR с использованием «continue» (проводка Craigslist)

  1. В положении 3:

    • кошек в порядке;
    • собаки в порядке;
    • ж/д в блоке
  2. В положении 2:

    • кошек в порядке;
    • w/d in unit;
    • квартира

Для учета изменчивости в позиции, мой код 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"] для сохранения значения «Нет», если утверждение if 'w/d in unit' in attr[i].xpath("text()").extract(): неверно?
    Я могу поставить его под оператором else(where item["WasherDryer"] = "None"), но тогда цикл не будет продолжать итерацию в следующем i.

ответ

1

Вы можете использовать extract_first и передать ему значение по умолчанию. Вот как это можно использовать:

for i in range (0, len(attr)): 
    item["washerDryer"] = attr[i].xpath("text()").extract_first(default='None') 
+0

Спасибо! Однако это изменение не сработало. Вчера я пересмотрел свой исходный код, и теперь он работает (см. Ответ на вопрос ниже). – slsu

+0

Приятно слышать это! В следующий раз отправьте немного исходного файла. Это значительно упростит задачу. Хорошего дня! –

0

вчера я пересмотрел свой исходный код. Я понял, что мне сначала нужно определить, существует ли текст «w/d в блоке» до начала итерации.

Что мы делаем здесь:

1) Смотрите, если текст «ж/д в блоке» появляется где-нибудь в строке «атр» 2) Если да, то переходите к итерации 3) Если нет, затем автоматически пометить элемент ['washerDryer'] = 'None'

 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" 
Смежные вопросы