PyQuery如何在元素的每个子元素中附加和重命名元素

2024-04-24 19:26:13 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在子元素中附加或插入一个class属性,但只针对直接子元素,然后对下一个类和子元素重复该属性。在

在文档中,此处引用pyquery manipulating

>>> d = pq('<html><body><div id="test"><a href="http://python.org">python</a> !</div></body></html>') >>> p.prependTo(d('#test')) [<p#hello.hello>] >>> d('#test').html() u'<p class="hello" ..

样品

^{pr2}$

所以对于每一个种族

<race id="211911"

把它添加到名为raceid的子元素中,这样提名就变成了

<nomination raceid="211911" number="1" saddlecloth="1" horse="Prized Icon" id="198206" idnumber=""
...
<nomination raceid="211911" number="4" saddlecloth="4" horse="Crown Him" id="202278" idnumber=""

然后对<race id="211912"及其子代的提名重复此操作。在


Tags: testdivid元素numberhello属性html
2条回答

您可以遍历所有race标记,获取id,并将其添加到nomination

d = pq(html)
for race_el in d('race'):
    race = pq(race_el)
    race_id = race.attr('id')

    # get the nominations and add the attribute

    for nom_el in race.items('nomination'):
        pq(nom_el).attr('raceid', race_id)

我建议你用Beautiful Soup。它在这样的任务上做得很好。

from bs4 import BeautifulSoup
soup = BeautifulSoup(YOUR_HTML_HERE, 'html.parser')
for race in soup.find_all('race'):
    raceid = race['id']
    # recursive=False because you said you only want direct children.
    # omit recursive=False if you want all nomination tags within each race.
    for nomination in race.find_all('nomination', recursive=False):
        nomination['raceid'] = raceid
print(soup.prettify("latin-1"))

你就完蛋了。

相关问题 更多 >