Скачиваю страницу при помощи requests.
r = requests.get(url)
html = r.text
Через beautifulsoup4 пытаюсь распарсить:
soup = BS(html, "lxml")
content = soup.find("div", class_="main_left").find("div", class_="content")
subject = content.find("h1", class_="news_title").text
text = content.find("div", class_="news_text")
text получается приблизительно с вот таким содержанием:
<div class="news_text">
\r\n\r\n\t\tЭто своего рода начальный абзац, как оказалось,
он идёт вне каких-то тегов, просто такой вот абзац,
иногда он на несколько строк,
но он находиться вот прямо так сразу просто в диве.\r\n\r\n\t\t
<p>\r\n\r\n\t\tКакой-нибудь абзац с каким-нибудь текстом,
обычно тоже на несколько строк\r\n\r\n\t\t</p>
<p>\r\n\r\n\t\tЕщё абзац, но уже содержащий какой-нибудь финт для рекламы
типа <span></span>
<script>тут какой-нибудь скрипт на 5-7 строк</script>
\r\n\r\n\t\t</p>
<p>\r\n\r\n\t\tЕщё один абзац, тоже может содержать что-то лишнее
или текст с <a href="https://toster.ru"><strong>какой-нибудь ссылкой</strong></a>,
а потом продолжается ещё текст.\r\n\r\n\t\t</p>
</div>
Если я просто суповским методом попытаюсь всё сразу преобразовать в текст (
text.text ) , то во-первых теряются абзацы, а они мне нужны.
А во-вторых в этот текст попадает содержимое скриптов, и текст сразу не пригоден (при этом если я каждый абзац чищу, то скрипты не попадают в текст, но об этом ниже).
И вот например я могу легко взять теги
p и почистить их в текст:
pre_abz = text.find_all('p')
abz = []
for a in pre_abz: abz.append(a.text.strip())
И да, действительно я получаю в абзацах всё, что находилось в тегах p и при этом всё чистенько, без "\r\n\r\n\t\t" , ссылок и скриптов.
Но мне нужен ещё и самый первый текст. Тот, который в моём примере начинается со слов
Это своего рода начальный абзац...
Как его достать без использования регулярок, ума не приложу.
По сути дела, мне нужно убрать все дочерние теги в переменной
text, но при этом чтобы осталось внетеговое содержимое.
Но я такого в документации не могу найти.
Пробовал сделать:
text.replace_with_children
на выходе получаю пустой див:
<div class="news_text"></div>
Будьте добры, подскажите, как этот текст красиво достать, что сделать?
С уважением.