Выравнивание между HTML и его текстом - PullRequest
0 голосов
/ 13 июня 2018

Я очищаю содержимое HTML с помощью BeautifulSoup и хотел бы иметь возможность перемещаться между фактическим HTML и его атрибутом getText ().

>>> html = "<p>Test</p>"

Ввести его в BeautifulSoup

>>> soup = BeautifulSoup(html, 'html.parser')

Теперь я могу легко получить его текстовую версию без атрибутов html:

>>> text = soup.get_text()
>>> print(text)
"Test"

Есть ли способ сопоставления (выравнивания) между индексными местоположениями каждого символа между html иtext?Мне нужно выполнить обработку на text, но затем изменить содержимое в html.

Здесь это будет означать:

0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
< | p | > | T | e | s | t | < | / | p | >

&

0 | 1 | 2 | 3
T | e | s | t

Так что выравнивание будет [(3,0), (4,1), (5,2), (6,3)].

Конечно, примерэто просто, но мне нужно это для очень сложных и больших файлов HTML.Это кому-то звонит?

1 Ответ

0 голосов
/ 13 июня 2018

Не могли бы вы пояснить хотя бы некоторый контекст, почему это требуется.

Кажется, что проблема заключается в определении смещения между фактическим исходным кодом html и содержащимся текстом (с учетом смещения символа исходного кода, введенноготег до и после).Я сам не пользуюсь этой библиотекой, но здесь все сказано.

Кажется, проблема полностью решается с помощью модуля Python re.Я знаю, что у soup есть некоторые подсказки об их собственном использовании поиска строк re, но это не очень подробно, поэтому вместо этого я буду обсуждать библиотеку python re, так как она выглядит примерно так:

это разрешение предполагает и основывается на предпосылке, что содержащийся внутри тега в исходном коде текст является уникальным

Программно создайте регулярное выражение, например: "<TAGNAME [\w ]*> (STRING CONTENTS)<TAGNAME/>".Это регулярное выражение использует группы, так что с помощью match.group(0).start() вы можете получить начальную позицию всего тега в исходном коде, а с помощью match.group(1).start() вы получите позицию STRING CONTENTS.Найдя разницу между этими двумя позициями, вы сможете сгенерировать хранимое целое число смещения, которое вы можете просто использовать вместо создания сопоставления словаря (тем не менее, смещение можно использовать для создания словаря).

NB:Имея ссылку на этот ответ , я узнал, что суп (the output of beautifulsoup(html, 'html.parser')) изменяет структуру входной строки, поэтому не будет надежным в использовании по сравнению с литеральным исходным кодом нетронутой строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...