获取 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)]
希望对您有所帮助
我正在使用 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)]
希望对您有所帮助