Получить элементы со значением стиля, превышающим порог, с помощью XPath - PullRequest
1 голос
/ 25 марта 2020

Итак, в двух словах, учитывая следующее html (дополнительные звездочки являются моим собственным дополнением):

<div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; **left:66px;** top:1892px; width:91px; height:10px;">
    <span style="font-family: Times-Roman; font-size:10px">FOO  
    <br>
    </span>
</div>
<div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; **left:514px;** top:1892px; width:20px; height:10px;">
    <span style="font-family: Times-Roman; font-size:10px">BAR
    <br>
    </span>
</div>

Я хотел бы использовать X-Path, чтобы получить все узлы, которые имеют Атрибут left меньше порогового значения и получает все узлы, которые имеют атрибут left, превышающий заданное пороговое значение, что-то вроде этого: /div[@style("left") < 300].

Просмотр этого не кажется Возможно, самое близкое, что мне удалось найти, было что-то вроде this , однако я бы хотел избежать использования регулярных выражений для сопоставления числовых данных, поскольку порог может варьироваться.

I пытаюсь извлечь эту информацию через Python (lxml модуль). В основном у меня есть PDF-файл со столбцами слева и справа, и я хочу разделить страницу на 2 (все содержимое слева само по себе, а все содержимое справа отдельно).

1 Ответ

1 голос
/ 25 марта 2020

Попробуйте это:

import lxml.html
foo = """
<div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:66px; top:1892px; width:91px; height:10px;">
    <span style="font-family: Times-Roman; font-size:10px">FOO  
    <br>
    </span>
</div>
<div style="position:absolute; border: textbox 1px solid; writing-mode:lr-tb; left:514px; top:1892px; width:20px; height:10px;">
    <span style="font-family: Times-Roman; font-size:10px">BAR
    <br>
    </span>
</div> """

doc = lxml.html.fromstring(foo)
doc.xpath("//div[number(substring-before(substring-after(@style, 'left:'),'px;')) < 300]")[0]

Выбирает первое <div>.

...