Выберите тег с точкой с Beautifulsoup - PullRequest
0 голосов
/ 03 июня 2019

Как можно выбрать и изменить тег <Tagwith.dot> с помощью другого текста с помощью Beautifulsoup?Если это невозможно с Beautifulsoup, то какая следующая лучшая библиотека для редактирования и создания документов xml, будет ли lxml?

from bs4 import BeautifulSoup as bs

stra = """
<body>
<Tagwith.dot>Text inside tag with dot</Tagwith.dot>
</body>"""
soup = bs(stra)

Желаемый XML:

<body>
<Tagwith.dot>Edited text</Tagwith.dot>
</body>

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

BS4 предполагает и преобразует все теги в нижний регистр. Приведенный ниже код работает нормально. Введите имя тега в нижнем регистре.

from bs4 import BeautifulSoup as bs

stra = """
<body>
<Tagwith.dot>Text inside tag with dot</Tagwith.dot>
</body>"""
soup = bs(stra, 'html.parser')

print(soup.find_all('tagwith.dot'))

Выход:

[<tagwith.dot>Text inside tag with dot</tagwith.dot>]
1 голос
/ 03 июня 2019

Вы можете использовать xml.etree.elementtree для достижения того, что вы хотите, следующим образом

import xml.etree.ElementTree as ET

stra = """
<body>
<Tagwith.dot>Text inside tag with dot</Tagwith.dot>
</body>"""

#Read xml string and convert to xml object
xml_obj = ET.fromstring(stra)

#Iterate through elements
for elem in xml_obj:
    #If tag is found, modify the text
    if elem.tag == 'Tagwith.dot':
        elem.text = 'Edited text'

#Print updated xml object as a string
print(ET.tostring(xml_obj).decode())

Выход будет

<body>
<Tagwith.dot>Edited text</Tagwith.dot>
</body>
...