получить с сайта часть текста по найденному слову

Задача на мой взгляд не простая и я не понимаю пока возможно ли это вообще. Я ищу на разных сайта (например: блог, форум, или какой либо другой сайт) определенный текст (например слово 'cmd'). И вот если таковое есть нужно получить кусок предложения например где это слово упоминается. Пока не совсем понимаю как определить это и получить напремер не весь текст а вырезанный любой кусок, чтобы вообще понять небольшую суть где этот текст. Пока вместо текста в результат вывожу ссылку если нашло в ней заданное слово.

Как пример взял сейчас ссылку с этого форума и пытаюсь найти в ней текст который упоинмается несколько раз, и вот нужно вывести результат например 50 символов текста до найденного слова и после него 50 символов текста, конечно если текст в середине оказывается.

Пока что я просто читаю всю страницу и не понимаю как определить текст, не ужели применять парсинг с перебором всех тегов в которые может быть помещен текст?

import urllib.request

url = 'https://ru.stackoverflow.com/questions/1497496/html-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86%d0%b0-%d0%be%d0%b1-%d0%be%d1%82%d1%81%d1%83%d1%82%d1%81%d1%82%d0%b2%d0%b8%d0%b8-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%bd%d0%b5%d1%82%d0%b0-%d0%b2%d0%bc%d0%b5%d1%81%d1%82%d0%be-%d0%b3%d1%83%d0%b3%d0%bb%d0%be%d0%b2%d1%81%d0%ba%d0%be%d0%b9'
txt = 'страницу'
soup = str(urllib.request.urlopen(url).read())

if soup.lower().find(txt.lower()) > -1:
    print(url)

UPD: Частично разобрался. заменил код на:

import requests
from bs4 import BeautifulSoup
import re
    
url = 'https://ru.stackoverflow.com/questions/1497496/html-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86%d0%b0-%d0%be%d0%b1-%d0%be%d1%82%d1%81%d1%83%d1%82%d1%81%d1%82%d0%b2%d0%b8%d0%b8-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%bd%d0%b5%d1%82%d0%b0-%d0%b2%d0%bc%d0%b5%d1%81%d1%82%d0%be-%d0%b3%d1%83%d0%b3%d0%bb%d0%be%d0%b2%d1%81%d0%ba%d0%be%d0%b9'
txt = 'страницу'

response = requests.get(url)
soup = BeautifulSoup(response.text.lower(), 'lxml')
txt = txt.lower()
items = soup.find(text=re.compile(txt))
if items != None:
    print(items)

Осталось понять как получить небольшой кусок текста рядом стоящий, точнее оно выводит рядом стоящий текст, только если он не вгонен в другие теги (типо жирность)


Ответы (1 шт):

Автор решения: Сергей Ш

простой вариант

import requests
from bs4 import BeautifulSoup

url = 'https://ru.stackoverflow.com/questions/1497496/html-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86%d0%b0-' \
      '%d0%be%d0%b1-%d0%be%d1%82%d1%81%d1%83%d1%82%d1%81%d1%82%d0%b2%d0%b8%d0%b8-' \
      '%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d0%bd%d0%b5%d1%82%d0%b0-%d0%b2%d0%bc%d0%b5%d1%81%d1%82%d0%be-' \
      '%d0%b3%d1%83%d0%b3%d0%bb%d0%be%d0%b2%d1%81%d0%ba%d0%be%d0%b9'
txt = 'страницу'

response = requests.get(url)
soup = BeautifulSoup(response.text.lower(), 'lxml')
items = soup.stripped_strings
for x in items:
    if txt in x:
        print(x)
        print()
# 2
print(*[x for x in soup.stripped_strings if txt in x], sep='\n\n')
→ Ссылка