markup = '<b></b><a></a><p>hey</p><li><p>How</p></li><li><p>are you </p></li>'
soup = BeautifulSoup(markup)
data = soup.find_all('p','li')
print(data)
结果如下所示
['<p>hey</p>,<p>How </p>,<li><p>How</p></li>,<p>are you </p>,<li><p>are you </p></li>']
我怎样才能让它返回
['<p>hey</p>,<li><p>How</p></li>,<li><p>are you </p></li>']
或我可以删除重复的p标签的任何方式谢谢
答案 0 :(得分:0)
BeautifulSoup
不分析html
的文本,而是获取所需的标记结构。在这种情况下,您需要执行一个额外的步骤,并检查<p>
的文本是否已在不同的结构中看到:
from bs4 import BeautifulSoup as soup
markup = '<b></b><a></a><p>hey</p><li><p>How</p></li><li><p>are you </p></li>'
s = soup(markup, 'lxml')
final_s = s.find_all(re.compile('p|li'))
final_data = [','.join(map(str, [a for i, a in enumerate(final_s) if not any(a.text == b.text for b in final_s[:i])]))]
输出:
['<p>hey</p>,<li><p>How</p></li>,<li><p>are you </p></li>']
答案 1 :(得分:0)
如果您要查找文字而不是<li>
标记,则只需搜索<p>
标记即可获得所需结果,而无需重复。
>>> data = soup.find_all('p')
>>> data
[<p>hey</p>, <p>How</p>, <p>are you </p>]
或者,如果您只是在寻找文本,可以使用:
>>> data = [x.text for x in soup.find_all('p')]
>>> data
['hey', 'How', 'are you ']