获取html源代码中的元素位置

时间:2017-10-27 09:10:47

标签: python web-scraping beautifulsoup web-crawler lxml

我使用lxml从HTML源中提取所有网址,但我也希望获得该网址的位置。 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

1 个答案:

答案 0 :(得分:0)

即使不是很优雅,URL中的正则表达式也可以完成这项任务:

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

如果您确实需要立即查找同一链接的所有位置:

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

希望有所帮助