Один из способов найти p
элементов, содержащих ?
это, чтобы определить функцию критерия:
def criterion(tag):
return tag.name == 'p' and re.search('\?', tag.text)
и использовать ее в find_all
:
pars = soup.find_all(criterion)
Но вы хотите напечатать только вопросы , а не целые абзацы из pars
.
Чтобы соответствовать этим вопросам, определите шаблон:
pat = re.compile(r'\d+\.\s[^?]+\?')
(последовательность цифр, точка, пробел, затем последовательность символов, отличных от ?
и, наконец, ?
).
Обратите внимание, что в общем случае один абзац может содержать несколько вопросов.Таким образом, цикл обработки найденных абзацев должен:
- использовать
findall
, чтобы найти всех вопросов в текущем абзаце (в результате получается список найденныхстроки), - выведите также все из них в отдельных строках, поэтому следует использовать
join
с \n
в качестве разделителя.
Таким образом, весь цикл должен быть:
for m in pars:
questions = pat.findall(m.get_text())
print('\n'.join(questions))