如何使用lxml和iterlinks替换链接

cyr*_*rus 6 python lxml

我是lxml的新手,我正在尝试使用iterlinks()来重写链接.

import lxml.html
html = lxml.html.document_fromstring(doc)
for element, attribute, link, pos in html.iterlinks():
    if attibute == "src":
         link = link.replace('foo', 'bar')
print lxml.html.tostring(html)
Run Code Online (Sandbox Code Playgroud)

但是,这实际上并没有取代链接.我知道我可以使用.rewrite_links,但iterlinks提供了有关每个链接的更多信息,所以我更喜欢使用它.

提前致谢.

Ste*_*ven 6

您不必仅为变量名称分配新的(字符串)值link,而是必须更改元素本身,在这种情况下,通过设置其src属性:

new_src = link.replace('foo', 'bar') # or element.get('src').replace('foo', 'bar')
element.set('src', new_src)
Run Code Online (Sandbox Code Playgroud)

请注意 - 如果您知道您感兴趣的"链接",例如,只有img元素 - 您也可以通过使用.findall()(或xpath或css选择器)而不是使用来获取元素.iterlinks().