使用 BeautifulSoup 遍历 XML 并拉出下一个兄弟

Iterate through XML with BeautifulSoup and Pull Next Sibling

我已将 PDF 转换为 XML 以便于解析。我的XML例子如下:

<LTTextLineHorizontal bbox="[58.501, 729.764, 78.501, 737.764]" height="8.0" width="20.0" word_margin="0.1" x0="58.501" x1="78.501" y0="729.764" y1="737.764"><LTTextBoxHorizontal bbox="[58.501, 729.764, 78.501, 737.764]" height="8.0" index="13" width="20.0" x0="58.501" x1="78.501" y0="729.764" y1="737.764">Date: </LTTextBoxHorizontal></LTTextLineHorizontal>
<LTTextLineHorizontal bbox="[107.249, 730.004, 147.281, 738.004]" height="8.0" width="40.032" word_margin="0.1" x0="107.249" x1="147.281" y0="730.004" y1="738.004"><LTTextBoxHorizontal bbox="[107.249, 730.004, 147.281, 738.004]" height="8.0" index="14" width="40.032" x0="107.249" x1="147.281" y0="730.004" y1="738.004">02/26/2020 </LTTextBoxHorizontal></LTTextLineHorizontal>

"Date:" 在一行中,下一个兄弟(我想这就是它的名字)的值为“02/26/2020”。

我试过:

from bs4 import BeautifulSoup
xml = open("test3.xml").read()
soup = BeautifulSoup(xml)
print(soup.find(text="Date:").findNext('LTTextLineHorizontal').contents[0])

我收到错误:

AttributeError: 'NoneType' object has no attribute 'findNext'

我的目标是遍历 XML 并提取所需的变量(即日期),然后将它们放入数据框中。但我什至还没有走到那一步。

此输出可能是字典或日期字符串:02/26/2020

使用正则表达式re

import re
from bs4 import BeautifulSoup
xml = open("test3.xml").read()
soup = BeautifulSoup(xml,'lxml')
print(soup.find('lttextboxhorizontal',text=re.compile("Date:")).find_next('lttextboxhorizontal').text)

或者

import re
from bs4 import BeautifulSoup
xml = open("test3.xml").read()
soup = BeautifulSoup(xml,'lxml')
print(soup.find(text=re.compile("Date:")).find_next('lttextboxhorizontal').text)

你可以在没有正则表达式的情况下做到这一点,也可以输入 space.

from bs4 import BeautifulSoup
xml = open("test3.xml").read()
soup = BeautifulSoup(xml,'lxml')
print(soup.find(text="Date: ").find_next('lttextboxhorizontal').text)