Цель состоит в том, чтобы найти расстояние между двумя тегами, например, первый внешний атрибут 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 совпадений.
Как вы отметили, похоже, что вы не можете получить точное положение символа в 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" в вашем примере).