最近有需要按层级解析如下格式的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <ul> <li>A</li> <ul> <li>A.1</li> <li>A.2</li> </ul> <li>B</li> <ul> <li>B.1</li> <li>B.2</li> </ul> <li>C</li> <ul> <li>C.1</li> <ul> <li>C.1.2</li> </ul> <li>C.2</li> </ul> </ul>
|
做了下搜索,有人建议是使用BeautifulSoup库,但是并没有显示出层级关系。这里写了简单示例,采用嵌套函数解决上述问题。直接看代码:
#导入Beautiful库,如果没有安装就使用pip install bs4安装吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| from bs4 import BeautifulSoup
myxml = """ <ul> <li>A</li> <ul> <li>A.1</li> <li>A.2</li> </ul> <li>B</li> <ul> <li>B.1</li> <li>B.2</li> </ul> <li>C</li> <ul> <li>C.1</li> <ul> <li>C.1.2</li> </ul> <li>C.2</li> </ul> </ul> """
|
#ul为Soup要解析的UL,level为列表层级
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def findSoup(ul, level): print("level:"+str(level)) for i in ul.contents: if '\\n' != i: if None!=i.find('li'): findSoup(i, level+1) else: print(str(i.get_text()))
soup = BeautifulSoup(myxml,'lxml')
findSoup(soup.ul, 0)
|
以上执行结果如下:
level:0
A
level:1
A.1
A.2
B
level:1
B.1
B.2
C
level:1
C.1
level:2
C.1.2
C.2
可以看出列表的层级已经分析出来了。以上仅为提供一个思路,如果要做进一步分析,可自行修改。