images = lxml.html.fromstring(body) images = images.xpath('//parent::img(re:match(@src, "(png)"))', namespaces={"re": "http://exslt.org/regular-expressions"}) print images
>>> import lxml.html >>> >>> s = """ ... ... <img src="abc/1.png"> ... <img src="abc/1.jpg"> ... <img src="def/2.png"> ... <img src="def/2.jpg"> ... ... """ >>> >>> html = lxml.html.fromstring(s) >>> >>> lst = html.xpath( ... '//img' ... '[substring(@src, string-length(@src) - 3) = ".png"]' ... '/@src' ... ) >>> lst ['abc/1.png', 'def/2.png'] >>>
>>> import lxml.html >>> >>> s = """ ... ... <img src="abc/1.png"> ... <img src="abc/1.jpg"> ... <img src="def/2.png"> ... <img src="def/2.jpg"> ... ... """ >>> >>> html = lxml.html.fromstring(s) >>> >>> ns = 'http://exslt.org/regular-expressions' >>> >>> lst = html.xpath('//img[re:test(@src, ".png$")]/@src', ... namespaces={'re': ns}) >>> >>> print(lst) ['abc/1.png', 'def/2.png'] >>>
py.user.nextЗамучил гугл этим вопросом
Нужно получить список, а потом передать его функции восстановления.
Что за функция восстановления?
geliusЯ имел в виду свою (самодельную) функцию восстановления.
Что за функция восстановления?
>>> import urllib.parse >>> >>> def repair(s, pref): ... out = urllib.parse.urljoin(pref, s) ... return out ... >>> repair('abc/1.png', 'http://www.domain.com') 'http://www.domain.com/abc/1.png' >>> repair('http://www.domain.com/abc/1.png', ... 'http://www.domain.com') 'http://www.domain.com/abc/1.png' >>>
ImportError: No module named parse
def repair(s, pref): out = urllib.basejoin(pref, s) return out
>>> import urllib.parse >>> >>> def repair(seq, base): ... out = [buildurl(i, base) for i in lst] ... return out ... >>> def buildurl(s, pref): ... out = urllib.parse.urljoin(pref, s) ... return out ... >>> base = 'http://www.domain.com' >>> >>> lst = ['abc/1.png', 'def/2.png'] >>> >>> lst = repair(lst, base) >>> >>> lst ['http://www.domain.com/abc/1.png', 'http://www.domain.com/def/2.png'] >>>
geliusЭто во второй версии не было разделения.ImportError: No module named parse