我有以下由 pdftotext
生成的 HTML block 使用 -bbox-layout
选项:
<flow>
<block xMin="21.600000" yMin="86.356000" xMax="178.647000" yMax="116.233001">
<line xMin="21.600000" yMin="86.356000" xMax="178.647000" yMax="101.833000">
<word xMin="21.600000" yMin="86.356000" xMax="178.647000" yMax="101.833000">
My text string located here!</word>
</line>
</block>
</flow>
[...]
<flow>
<block xMin="223.560000" yMin="323.675000" xMax="345.563500" yMax="339.855500">
<line xMin="223.560000" yMin="323.675000" xMax="345.563500" yMax="339.855500">
<word xMin="223.560000" yMin="323.675000" xMax="316.836500" yMax="339.855500">Another string
</word>
<word xMin="320.022000" yMin="323.675000" xMax="345.563500" yMax="339.855500">And another!</word>
</line>
</block>
</flow>
现在,我正在尝试动态解析上述结构,并获取每个 <block>[...]</block>
内容,其中值 xMin
和 xMax
介于两个数字之间。
假设我有以下数字:
areas[0] = (100, 0, 200, 792)
areas[1] = (200, 0, 612, 792)
with open(path_to_html_document) as html_file:
parsed_html = BeautifulSoup(html_file)
for (i, area) in enumerate(areas):
xMinValue, xMaxValue = areas[i][0], areas[i][2]
block_tags = parsed_html.find_all(
"block", attrs={"xMin": xMinValue, "xMax": xMaxValue})
print(block_tags)
上面的代码没有返回任何东西,因为没有匹配的标签。 find_all()
搜索 block
的完全匹配项带有特定数字的标签 - 但我正在尝试搜索 block
标签,其中 xMin 和 xMax 是:
areas[0] is between 100 and 200
areas[1] is between 200 and 612
BeautifulSoup 可以吗?
最佳答案
替换你的代码:
block_tags = parsed_html.find_all(
"block", attrs={"xMin": xMinValue, "xMax": xMaxValue})
print(block_tags)
收件人:
block_tags = parsed_html.find_all("block")
for block in block_tags:
if float(block['xmin']) >= xMinValue and float(block['xmax']) <= xMinValue:
print(block)
如果调试 html 代码 print(parsed_html)
,您将看到 html block
all attribute in small letter.
关于Python3 - BeautifulSoup - 获取两个标签之间的值,其中值介于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56736629/