2016-10-05 7 views
-1

Как исключить подстроку из печатается в объекте objКак предотвратить печать определенной строки в find_all()?

obj = soup.find_all('tag') 
if "string" not in obj.text: 
    print obj.text 

Но из-за использования find_all() для объекта Obj ничего не печатается. Что нужно сделать, чтобы мы печатали только нужную строку в obj.

+1

Можете ли вы опубликовать полный, исполняемый пример? – scotty3785

+0

* Но из-за использования метода find_all() для объекта obj ничего не печатается *, да есть определенно некоторый вывод, это была бы ошибка. –

ответ

0

Вы должны перебрать список возвращенного find_all():

for i in soup.find_all('tag'): 
    txt = i.text 
    if 'string' not in txt: 
     print txt 

В качестве альтернативы, вы можете создать еще один список, в котором нежелательные теги отфильтровываются:

filtered_lst = [i for i in soup.find_all('tag') if 'string' not in i.text] 

Это даст вам список из Tag объекты, похожие на те, что были возвращены find_all(), но только с тегами, которые не включают 'string' в их .text. После этого вы можете делать то, что вы хотите, это:

for tag in filtered_lst: 
    print tag.text 

Update:

С другой стороны, если ваша цель состоит в том, чтобы просто фильтровать 'string' из текста тега, вы можете использовать метод replace() строк:

for tag in soup.find_all('tag'): 
    print tag.text.replace('string', '') 

Однако, имейте в виду, что это удалит 'string' везде, где он находится в тексте, а может оставить нежелательные пробелы должны быть удалены позже. Например:

>>> 'hellostring string'.replace('string', '') 
'hello ' 
+0

Я тоже это сделал, но все равно это одно и тоже. Все строки, содержащиеся в этом списке, не печатаются –

+0

Убедитесь, что имена переменных совпадают. Я вижу, что вы используете 'obj' и' Obj'. Python очень чувствителен к регистру. – elethan

+0

Это на самом деле опечатка, но фактический код чист. –

Смежные вопросы