如何使用 lxml 和 iterlinks 替换链接
我是 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)
然而,这实际上并没有取代链接。我知道我可以使用 .rewrite_links,但 iterlinks 提供有关每个链接的更多信息,所以我更愿意使用它。
提前致谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您必须更改元素本身,而不是仅仅为变量名称
link
分配新的(字符串)值,在本例中是通过设置其src
属性:请注意 -如果您知道您感兴趣的“链接”,例如,仅
img
元素 - 您还可以使用.findall()
(或 xpath 或 css)获取元素选择器)而不是使用.iterlinks()
。Instead of just assigning a new (string) value to the variable name
link
, you have to alter the element itself, in this case by setting itssrc
attribute:Note that - if you know which "links" you are interested in, for example, only
img
elements - you can also get the elements by using.findall()
(or xpath or css selectors) instead of using.iterlinks()
.这是使用 rewrite_links 的工作代码:
输出:
Here is working code with rewrite_links:
Output:
lxml 提供了一个
rewrite_links
方法(或将要解析的文本传递到文档中的函数)来提供更改文档中所有链接的方法:lxml provides a
rewrite_links
method (or function that you pass the text to be parsed into a document) to provide a method of changing all links in a document:链接可能只是实际对象的副本。尝试替换循环中元素的属性。即使 element 可能只是一个副本,但它值得一试......
Probably link is just a copy of the actual object. Try replacing the attribute of the element in your loop. Even element can be just a copy, but it deserves a try...