【发布时间】:2020-10-24 00:15:30
【问题描述】:
我正在尝试从文本中删除一些标记,例如 <p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n</p> 和 <p>\r\n</p>
这是我在这里使用 BeautifulSoup 的代码。
article = Article.objects.all()
for obj in article:
soup_en = BeautifulSoup(obj.text_en, features="html5lib")
obj.text_en = '\n'.join(map(str, OrderedSet(soup_en.find_all('p')))).replace(r'\r\n', '').replace('#####444#####', '').replace('#####555#####', '').replace('<p></p>', '').replace(r'<p> </p>', '')
obj.save()
带有要删除标记的文本:
<p>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n</p>
<p>\r\n</p>
<p>Name of person </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>\r\n</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>\r\n</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
当我只处理一个对象时一切正常,例如obj = Article.objects.get(old_id=50)
但是当我将代码放入for循环时,我在文本中发现奇怪的结果,我的意思是有些部分是双倍的(<p>Name of person </p>),并且在文本的开头是标记
<p> </p>
<p>Name of person </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Name of person </p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
【问题讨论】:
-
试试代码
text = re.sub(r'<p>[\r\n\s]*</p>','',text ) -
您应该在 bs 找到的每个元素上调用
.text(),这只会为您提供文本并删除任何 HTML 元素。 -
您能否告诉我们
obj.text_en的外观以及您期望它之后的外观?
标签: python django regex beautifulsoup tags