2011-04-01 119 views
2

我想用pyquery来做到这一点。如何使用pyquery修改python中的节点属性

例如:

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

由于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>' 
+0

肯定的,但选择(IMG)返回一个列表IMG,我想修改的全html.thanks – alwx 2011-04-01 19:48:25

+0

我添加编辑了一段代码。要取回包装HTML,请使用['outerHtml()'](http://packages.python.org/pyquery/api.html#pyquery.pyquery.PyQuery.outerHtml)方法。 – 2011-04-01 20:23:08

+0

是的~~~~,就这样 – alwx 2011-04-02 05:11:50

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> 

要应用功能的选择,你可以使用。每(),但要注意,裸元素传递给函数:

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