我试图使用BeautifulSoup来解析Evernote清单的内容。但是,当我在内容上调用HTML解析器时,它会不断纠正自关闭标签(en-todo),因此,当我尝试获取en-todo标签的文本时,它要么空白。
note_body = '<en-todo checked="true" />window caulk<en-todo />cake pan<en-todo />cake mix<en-todo />salad mix<en-todo checked="true"/>painters tape<br />'
import re
from bs4 import BeautifulSoup
soup = BeautifulSoup(note_body, 'html.parser')
checklist_items = soup.find_all('en-todo')
print checklist_items
上面的代码仅返回标签,而无需任何文本。
[<en-todo checked="true"></en-todo>, <en-todo></en-todo>, <en-todo></en-todo>, <en-todo></en-todo>, <en-todo checked="true"></en-todo>]
您需要获取标签中未包含的短信!
您需要使用tag.next_sibling
!
>>> [each.next_sibling for each in checklist_items]
[u'window caulk', u'cake pan', u'cake mix', u'salad mix', u'painters tape']
这适用于您的字符串:
from bs4 import BeautifulSoup
soup = BeautifulSoup(note_body, 'html.parser')
checklist_items = soup.find_all('en-todo')
for item in checklist_items:
print(item.get_text())
尝试next
。
示例:
Data: <br /> My information
item.next
Gives: My information