如何在Python中使用pyquery修改节点属性

2 投票
2 回答
1894 浏览
提问于 2025-04-16 14:54

我想用pyquery来做这个。

比如说:

html='<div>arya stark<img src="1111"/>ahahah<img src="2222"/></div>'
a=PyQuery(html)

我想把HTML修改成

<div>arya stark<img src="aaaa"/>ahahah<img src="bbbb"/></div>

换句话说,我只需要改变标签的src属性,然后得到修改后的HTML。

有什么想法吗?或者其他方法?

谢谢

2 个回答

0

像这样:

import pyquery

html = '<div>arya stark<img src="1111"/>ahahah<img src="2222"/></div>'
tree = pyquery.PyQuery(html)
tree('img:first').attr('src', 'cccc')
print str(tree)

<div>arya stark<img src="cccc"/>ahahah<img src="2222"/></div>

如果你想对一组选中的元素应用一个函数,可以使用.each()这个方法。不过要注意,传给这个函数的是原始的元素:

>>> from __future__ import print_function
>>> tree('img').each(lambda i, n: print(n.attrib))
{'src': 'cccc'}
{'src': '2222'}
2

因为PyQuery是为了模仿jQuery,所以也许这个问题会对你有帮助。简单来说,你可以使用attr()这个方法:

>>> html='<div>arya stark<img src="1111"/>ahahah<img src="2222"/></div>'
>>> a=PyQuery(html)
>>> a.outerHtml()
'<div>arya stark<img src="1111">ahahah<img src="2222"></div>'
>>> for img in a('img'):
...     PyQuery(img).attr('src', "whatever")
...
[<img>]
[<img>]
>>> a.outerHtml()
'<div>arya stark<img src="whatever">ahahah<img src="whatever"></div>'

撰写回答