我正在尝试学习如何使用 XML 抓取网站。我对 html 非常熟悉,但我注意到我尝试抓取的一些网站具有 XML API。如果我没记错的话,它的抓取速度更快,也更简单。
我有以下示例代码。
txt = '''
<?xml version="1.0"?>
<DIV5 N="100" TYPE="HEADER">
<HEAD>100: DIV5 Title</HEAD>
<AUTH>
<HED>Authority:</HED>
<PSPACE>AUTHORITY SPACE</PSPACE>
</AUTH>
<SOURCE>
<HED>Source:</HED>
<PSPACE>Source Text.</PSPACE>
</SOURCE>
<DIV7 N="1" TYPE="SUB">
<HEAD>1. DIV7Title 1</HEAD>
<DIV8 N="1.1" TYPE="SECTION">
<HEAD>1.1 DIV8Title 1</HEAD>
<P> (1) Text 1</P>
</DIV8>
<DIV8 N="1.2" TYPE="SECTION">
<HEAD>1.2 DIV8Title 2</HEAD>
<P>(a) text 1 </P>
<P>(ii) text 2 </P>
<P>(2) text 2.1 </P>
</DIV8>
<DIV8 N="1.3" TYPE="SECTION">
<HEAD>1.3 DIV8 Title 3</HEAD>
<P> (ff) text 1 </P>
</DIV8>
</DIV7>
<DIV6 N="A" TYPE="SUBPART">
<HEAD>Subpart A: DIV6Title 1 </HEAD>
<DIV7 N="2" TYPE="SUB">
<HEAD>2 DIV7Title 2</HEAD>
<DIV8 N="2.1" TYPE="SECTION">
<HEAD>2.1 DIV8Title 1 </HEAD>
<P>(a) text 1</P>
<P>(b) text 2 </P>
<P>(c) text 3</P>
</DIV8>
<DIV8 N="2.2" TYPE="SECTION">
<HEAD>2.2 DIV8 Title2</HEAD>
<P> (o) text</P>
</DIV8>
</DIV7>
<DIV7 N="3" TYPE="SUB">
<HEAD>3. DIV7 Title 3</HEAD>
<DIV8 N="3.1" TYPE="SECTION">
<HEAD>3.1 DIV8 Title 1</HEAD>
<P>(r) text 1</P>
<P>(s) text 2</P>
</DIV8>
</DIV7>
</DIV6>
<DIV6 N="B" TYPE="SUBPART">
<HEAD>Subpart B: DIV6 Title 2</HEAD>
<DIV8 N="12" TYPE="SECTION">
<HEAD>12. DIV8 Title 1</HEAD>
<P>7(a) text </P>
</DIV8>
</DIV6>
</DIV5>
'''
我有以下代码:
import lxml.etree as ElementTree
tree = ElementTree.ElementTree(ElementTree.fromstring(txt))
root = tree.getroot()
sub_parts = root.findall(".//DIV6")
for sub in sub_parts:
l2_title = subpart.find('.//HEAD').text
.
.# Unsure what to do after this part
.
我遇到的问题:
DIV5的孩子是
[HEAD, AUTH, SOURCE, DIV7, DIV6, DIV6]
上面的代码似乎只抓取 DIV6 及其子项。代码
完全跳过他们的 DIV7 兄弟姐妹及其孩子。
我怎样才能同时解析两者?
使用 ElementTree 获得以下结果的最佳方法是什么?
理想的结果:
L2Ci | L2标题 | L3Ci | L3标题 | L4Ci | L4标题 | L5Ci | L5标题 | L6Ci | L6标题 |
---|---|---|---|---|---|---|---|---|---|
1. | DIV7标题 1 | 1.1 | DIV8标题 1 | (1) | 课文 1 | ||||
1. | DIV7标题 1 | 1.2 | DIV8标题 2 | (一) | 正文 1 | ||||
1. | DIV7标题 1 | 1.2 | DIV8标题 2 | (二) | 文字2 | ||||
1. | DIV7标题 1 | 1.2 | DIV8标题 2 | (二) | 文字2 | (2) | 正文 2.1 | ||
1. | DIV7标题 1 | 1.3 | DIV8标题 3 | (ff) | 正文 1 | ||||
A | DIV6标题 1 | 2. | DIV7标题 2 | 2.1 | DIV8标题 1 | (一) | 正文 1 | ||
A | DIV6标题 1 | 2. | DIV7标题 2 | 2.1 | DIV8标题 1 | (二) | 文字2 | ||
A | DIV6标题 1 | 2. | DIV7标题 2 | 2.1 | DIV8标题 1 | (三) | 正文 3 | ||
A | DIV6标题 1 | 2. | DIV7标题 2 | 2.2 | DIV8标题 2 | (o) | 正文 1 | ||
A | DIV6标题 1 | 3. | DIV7标题 3 | 3.1 | DIV8标题 3 | (右) | 正文 1 | ||
A | DIV6标题 1 | 3. | DIV7标题 3 | 3.1 | DIV8标题 3 | (小) | 文字2 | ||
乙 | DIV6标题 2 | 12 | DIV8标题 1 | (一) | 文字 |
谢谢!