Найти - Пользователи
Полная версия: BeautifulSoup как разделить текст по произвольному тэгу?
Начало » Python для новичков » BeautifulSoup как разделить текст по произвольному тэгу?
1
Sterh
Здравствуйте!
В питоне и BS новичек. Долго гуглил, но не нашел, как решить проблему (может не в ту сторону гуглил)

Задача:
Разбить текст посредством BS по произвольному тэгу. Например в коде страницы есть такой кусок:
 <option value="6">Ассам</option><option value="7">Кения</option><option value="8">Руанда</option><option value="9">Цейлон</option>

Между словами пробелов, или переводов строк нет. В результате разбора текста посредством кода:
 resp = BeautifulSoup(open(p, encoding='utf-8'))
resp.body.text

Получаю склеенные слова:
“АссамКенияРуандаЦейлонПрефектура”

Вопрос: Как разлеплять подобные вещи, при условии, что:
1) Вместо “option” тэг может быть абсолютно любой (на что хватает фантазии вэбмастера), и каждый раз вычислять что это за тэг не вариант вообще
2) Разделять по заглавным буквам так же не вариант, ибо далеко не факт, что на другой странице слепленные слова будут написаны тоже с заглавных
Vladimirv
Доки на русском. Смотреть в сторону children, выбираем родителя, пробегаем по деткам и пакуем нужным образом. Все просто)
Sterh
Vladimirv
Благодарю за ответ!
Однако я, наверное, не совсем корректно сформулировал задачу. Мне нужно было, что бы НЕ склеивались слова, вне зависимости от того, внутри каких тэгов они расположены. Нужен некий универсальный способ, применимый к любой произвольной вэб-странице. Т.е. искать родителей тоже не вариант.
Пока нашел вот такой вариан:
 resp = BeautifulSoup(open(p, encoding='utf-8'))
clean_text = ' '.join(resp.body.findAll(text=True))

Вроде работает (слова расклеены), но при этом в текст тянется часть тэгов…. Вот вроде такого:

 Вход для клиентов Добрый день <span id="user_email"></span> Личный кабинет Выйти Регистрация
Ап:
А, тэги, которые тянет, закомментированы:

 </span><!-- <span id="user_email"></span>-->
… ковыряем дальше

Ап2:
Если дебил, то это лечится с трудом Удаляем комментарии:
 for comment in resp.findAll(text=lambda text: isinstance(text, bs4.Comment)):
    comment.extract()

Полностью получается так:
 resp = BeautifulSoup(open(p, encoding='utf-8'))
# Удаляем все noindex
for i in resp.findAll('noindex'):
    resp.noindex.decompose()
# Удаляем скрипты
for i in resp.findAll('script'):
    resp.script.decompose()
#Удаляем закооментированные строки
for comment in resp.findAll(text=lambda text: isinstance(text, bs4.Comment)):
    comment.extract()
#Получаем строку текста
clean_text = ' '.join(resp.body.findAll(text=True))

Мож кому пригодится Решение взято тут: http://tinycode.ru/how-to-clean-html-and-strip-tags.html
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB