目标是找到2个标签之间的距离,例如第一个外部的href属性和标题标签,使用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 :(得分:1)
正如您所指出的那样,您似乎无法获得BeautifulSoup中元素的确切字符位置。
也许this answer可以帮助您:
AFAIK,lxml只提供sourceline,这是不够的。 Cf API:
Original line number as found by the parser or None if unknown.
但expat在文件中提供了精确的偏移量:CurrentByteIndex。
- 从start_element处理程序获取,它返回标记的开始(即'&lt;')偏移量。
- 从char_data处理程序获取,它返回数据的开始(即示例中的“B”)偏移量。
答案 1 :(得分:1)
Beautiful Soup 4现在支持Tag.sourceline
和Tag.sourcepos
。
参考:https://beautiful-soup-4.readthedocs.io/en/latest/#line-numbers