如何使用beautifulsoup查找html中2个元素之间的距离

时间:2014-04-15 00:43:40

标签: python html beautifulsoup

目标是找到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中位置/位置的方法。

2 个答案:

答案 0 :(得分:1)

正如您所指出的那样,您似乎无法获得BeautifulSoup中元素的确切字符位置。

也许this answer可以帮助您:

  

AFAIK,lxml只提供sourceline,这是不够的。 Cf APIOriginal 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.sourcelineTag.sourcepos

参考:https://beautiful-soup-4.readthedocs.io/en/latest/#line-numbers