获取 html 源中的元素位置

Get element position in html source

我正在使用 lxml 从 HTML 源中提取所有 URL,但我还想获得 URL 的位置。 URL第一个字符位置。

现在我有这样的东西:

import requests
import lxml.html

r = requests.get(url)
soup = lxml.html.fromstring(req.text)

links = []
for element, attribute, link, pos in soup.iterlinks():
    try:
        links.append((link, req.text.index(link)))
    except:
        # can't find link in text because '&' gets resolved to '&'
        pass

有更好的方法吗?不确定这个解决方案在性能方面有多好。

LXML 是否将元素的位置保存在某处?我知道它保存了找到元素的源行,但我找不到关于元素起始位置的任何信息。

http://lxml.de/api/lxml.etree._Element-class.html#sourceline

即使不是很优雅,来自 URL 的正则表达式也可以完成工作:

import re
p = re.compile(link)
start_position = p.search(data).start()

如果您确实需要一次找到相同的所有位置 link:

p = re.compile(link) positions = [asd.start() for asd in p.finditer(req.text)]

希望对您有所帮助