Как найти расстояние между 2 элементами в HTML, используя Beautifulsoup

0

Цель состоит в том, чтобы найти расстояние между двумя тегами, например, первый внешний атрибут href и тег title, используя BeautifulSoup.

html = '<title>stackoverflow</title><a href="https://stackoverflow.com">test</a>'
soup = BeautifulSoup(html)
ext_link = soup.find('a',href=re.compile("^https?:",re.IGNORECASE))
title = soup.title
dist = abs_distance_between_tags(ext_link,title)
print dist
30

Как мне это сделать без использования регулярного выражения?

Обратите внимание, что порядок тегов может отличаться, и может быть более одного совпадения (хотя мы принимаем только первое использование find()).

Я не смог найти метод в BeautifulSoup, который возвращает местоположения/позиции в html совпадений.

  • 0
    Какой тип "расстояния"? Количество тегов между ними? Зависит от того, как именно вы хотите их посчитать. Пиксели на экране? Зависит от браузера, на который вы ориентируетесь. Что-то другое?
  • 0
    Извините, я имел в виду количество символов строки между ними, в примере положение s в стеке потока до h в https.
Показать ещё 2 комментария
Теги:
beautifulsoup

1 ответ

1
Лучший ответ

Как вы отметили, похоже, что вы не можете получить точное положение символа в BeautifulSoup.

Возможно, этот ответ может помочь вам:

AFAIK, lxml предлагает только sourceline, чего недостаточно. Cf API: Original line number as found by the parser or None if unknown.

Но expat обеспечивает точное смещение в файле: CurrentByteIndex.

  • Выбранный из обработчика start_element, он возвращает начало тега (т.е. "<").
  • Полученный из обработчика char_data, он возвращает начало данных (т.е. "B" в вашем примере).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню