我使用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
答案 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)]
希望有所帮助