Удалить теги <br>из проанализированного списка Beautiful Soup? - PullRequest
14 голосов
/ 08 мая 2011

Я вхожу в цикл for со всеми нужными строками:

page = urllib2.urlopen(pageurl)
soup = BeautifulSoup(page)
tables = soup.find("td", "bodyTd")
for row in tables.findAll('tr'):

На данный момент у меня есть информация, но

<br />

теги разрушают мой вывод.

Какой самый чистый способ удалить их?

Ответы [ 4 ]

19 голосов
/ 08 мая 2011

Если вы хотите перевести <br /> в новые строки, сделайте что-то вроде этого:

def text_with_newlines(elem):
    text = ''
    for e in elem.recursiveChildGenerator():
        if isinstance(e, basestring):
            text += e.strip()
        elif e.name == 'br':
            text += '\n'
    return text
16 голосов
/ 08 мая 2011
for e in soup.findAll('br'):
    e.extract()
3 голосов
/ 10 января 2013

заменить теги в начале пробелом Красивый суп также принимает .read () на объекте urlopen, так что это должно работать - - -

page = urllib2.urlopen(pageurl)
page_text=page.read()
new_text=re.sub('</br>',' ',page_text)
soup = BeautifulSoup(new_text)
tables = soup.find("td", "bodyTd")
for row in tables.findAll('tr'):
.....

re.sub заменяет тег br пробелом

1 голос
/ 08 мая 2011

Может some_string.replace('<br />','\n') заменить разрывы на новые строки.

>>> print 'Some data<br />More data<br />'.replace('<br />','\n')
Some data
More data

Возможно, вы захотите проверить html5lib и lxml , которые очень хороши при разборе html. lxml действительно быстрый, а html5lib очень надежный.

...