2014-01-23 3 views
2

Я пытаюсь разобрать таблицу с BeautifulSoup и удалите пробелы, найденные в некоторых строках с - так что вместоЗаменить текст в Python с BeautifulSoup

<tr> 
<td><small>15</small></td> 
<td><small><small>Cat</small></small></td> 
</tr> 
<tr> 
<td><small><small>   </small></small></td> 
<td><small><small> </small></small></td> 
</tr> 

Я хочу

<tr> 
<td><small>15</small></td> 
<td><small><small>Cat</small></small></td> 
</tr> 
<tr> 
<td><small><small>-</small></small></td> 
<td><small><small>-</small></small></td> 
</tr> 

У меня есть вид:

from bs4 import BeautifulSoup 

soup = BeautifulSoup (open("table.html")) 

for a in soup.findAll('small'): 
    a.replaceWith("-") 

Это удаляет пространство, но оно также удаляет текст 15 и cat (я знаю, что я заменяю все в теге). Это, насколько я мог получить. Как я могу исправить этот код, чтобы он заменил пространство только на?

EDIT: К сожалению, здесь есть сырой код

<tr> 
<td><small>15</small></td > 
<td><small><small>&nbsp;</small></small></td > 
</tr> 
<tr> 
<td><small><small>&nbsp; &nbsp;</small></small></td > 
<td><small><small>&nbsp;</small></small></td > 
</tr> 
+0

проверить его перед заменой: если a.isspace(): a.replaceWith ("-") – Mortezaipo

+0

Это возвращается с 'TypeError: объект '' NoneType не callable' – Howli

+0

Я так извините, пожалуйста, проверьте мой ответьте, что я опубликовал. – Mortezaipo

ответ

2

Попробуйте:

from BeautifulSoup import BeautifulSoup as bs 
soup = bs(open("table.html")) 
for i in soup.findAll('small'): 
    if i.text == "" or "&nbsp;" in i.text: 
     i.string = '-' 
print soup 

вам необходимо проверить значение перед заменой.

+0

Это не сработало для меня, поэтому я скопировал пробел, который находится в файле, и я получаю 'SyntaxError: Non-ASCII символ '\ xc2' в файле, но не кодируется. Поэтому я добавил' # - * - кодирование: latin -1 - * - ', и теперь я получаю' UnicodeWarning: Unicode равное сравнение не удалось преобразовать оба аргумента в Unicode, интерпретируя их как не равные , если i.text == "┬á": ' – Howli

+0

@Howlin, эта ошибка относится к юникода. посмотрите: http://www.python.org/dev/peps/pep-0263/ – Mortezaipo

+0

@ Хоулин, пожалуйста, обновите свое сообщение своим кодом, чтобы проверить его. – Mortezaipo

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