我正在处理此类html处理问题,以便根据文本的结构将文本分组。原始文件非常复杂,因此我将其简化如下: 我有名单:['Json Bell','Jim Charlie','Mike Alfie','William Cyphort','Juniper Egbert']
和html文件:
<p>studets</p>
<ul>
<li>Json Bell</li>
<li>Jim Charlie</li>
<li>Mike Alfie</li>
</ul>
<p>teachers</p>
<ul>
<li>William Cyphort</li>
<li>Juniper Egbert</li>
</ul>
我如何获得分组['Json Bell','Jim Charlie','Mike Alfie'],['William Cyphort','Juniper Egbert']
任何想法都会受到欢迎!我对python很熟悉,所以python中的处理方法会更好。
问题可以用另一种方式描述:如何知道字符串是否具有相同的父节点。
答案 0 :(得分:0)
对于这个问题,我将使用列表理解-首先选择所有<ul>
标签,然后为每个ul
标签选择所有li
标签并提取文本:
data = """
<p>studets</p>
<ul>
<li>Json Bell</li>
<li>Jim Charlie</li>
<li>Mike Alfie</li>
</ul>
<p>teachers</p>
<ul>
<li>William Cyphort</li>
<li>Juniper Egbert</li>
</ul>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'lxml')
print([[li.text for li in ul.select('li')] for ul in soup.select('ul')])
输出为:
[['Json Bell', 'Jim Charlie', 'Mike Alfie'], ['William Cyphort', 'Juniper Egbert']]
编辑:
要比较父母,您可以使用.parent
属性:
tag1 = soup.find(text='Json Bell')
tag2 = soup.find(text='Jim Charlie')
print(tag1.parent == tag2.parent) #tag1 and tag2 parents are <li> tags (different)
print(tag1.parent.parent == tag2.parent.parent) #this compares <ul> tags, which are the same
此打印:
False
True
注意:soup.find(text='Json Bell')
查找NavigableString
类。该NavigableString
的父级是<li>
标记。 <li>
标签的父标签是<ul>
标签,依此类推...