Проблема, связанная с string
, заключается в том, что string
, как описано в документации , доступно только:
если тег имеет только один дочерний узел, и этот дочерний узел является строкой
Следовательно, в вашем случае p.string
- это None
, и вы не можете перебрать его. Чтобы получить доступ к содержимому тега, вы должны использовать p.contents
(это список, содержащий теги) или p.text
(это строка со всеми удаленными тегами).
В вашем случае вы, вероятно, ищете что-то вроде этого:
>>> ''.join([str(e) for e in soup.p.contents
if not isinstance(e, BeautifulSoup.Tag)
or e.name != 'a'])
>>> ' 1. Content of the paragraph <i> in italic </i> but not <b> strong </b> .'
Если вам нужно также удалить префикс `'', я бы использовал регулярное выражение для удаления этой части из конечной строки.