如何使用pyquery修改python中的节点属性

时间:2011-04-01 19:40:29

标签: python pyquery

我想用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>
换言之,

只需要更改img元素的src属性,并获取修改后的html。

任何想法?或任何其他方法?

感谢

2 个答案:

答案 0 :(得分:2)

由于PyQuery意味着您镜像jQuery,因此this question可能是相关的。长话短说,使用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>'

答案 1 :(得分: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'}