2013-11-13 3 views
1

Мне нужно удалить все теги html из данных данной веб-страницы. Я попытался это с помощью регулярных выражений:Регулярные выражения в юникоде python

import urllib2 
import re 
page = urllib2.urlopen("http://www.frugalrules.com") 
from bs4 import BeautifulSoup, NavigableString, Comment 
soup = BeautifulSoup(page) 
link = soup.find('link', type='application/rss+xml') 
print link['href'] 
rss = urllib2.urlopen(link['href']).read() 
souprss = BeautifulSoup(rss) 
description_tag = souprss.find_all('description') 
content_tag = souprss.find_all('content:encoded') 
print re.sub('<[^>]*>', '', content_tag) 

Но синтаксис re.sub является:

re.sub(pattern, repl, string, count=0) 

Итак, я изменил код, (вместо оператора печати выше):

for row in content_tag: 
    print re.sub(ur"<[^>]*>",'',row,re.UNICODE 

Но это дает следующее сообщение об ошибке:

Traceback (most recent call last): 

File "C:\beautifulsoup4-4.3.2\collocation.py", line 20, in <module> 
print re.sub(ur"<[^>]*>",'',row,re.UNICODE) 
File "C:\Python27\lib\re.py", line 151, in sub 
return _compile(pattern, flags).sub(repl, string, count) 
TypeError: expected string or buffer 

Что я делаю неправильно?

+0

Вы можете не найти минимальный пример кода, который также терпит неудачу? Например, удалите все зависимости, отличные от stdlib 'bs4', если они не имеют решающего значения. Если они есть, добавьте к ним тег. Это упрощает ответ и более полезно. –

+0

Вы видели [этот ответ] (http://stackoverflow.com/a/1732454/1663352) – Noelkd

+0

Я знаю, что синтаксический анализ HTML с помощью RegEx - это грех, но umm, я действительно не мог удалить теги любым другим способом. Не могли бы вы предложить мне вместо этого рабочий метод? :) – Remy

ответ

1

Последняя строка вашего кода попробовать:

print(re.sub('<[^>]*>', '', str(content_tag))) 
+0

извините - мой код написан для python 3 try 'print re.sub ('<[^>] *>', '', str (content_tag))' – Qui

+0

Большое вам спасибо :) – Remy

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