Need Help with the BeautifulSoup problem, please
Peter Otten
__peter__ at web.de
Mon Dec 16 04:33:24 EST 2013
seaspeak at gmail.com wrote:
> I need to replace all tag <b> with <span> after ■. But the result from
> below is '■ <span style="REPLACE">D</span> / <font></font>'
> Can you explain what I did wrong, please.
>
> s = '■<b>A</b> <b>B</b> <b>C</b> <b>D</b> / <font></font>'
> soup = BeautifulSoup(s)
> for i in soup.find_all(text='■'):
> tag = soup.new_tag('span')
> tag['style'] = 'REPLACE'
> for ii in i.find_next_siblings():
> if ii.name=='font' or str(ii).lstrip('')[0:1]=='/':
> break
> else:
> if ii.name=='b':
> tag.string=ii.string
> print(ii.replace_with(tag))
> print(soup)
It looks like you cannot reuse a tag. Try
s = '■<b>A</b> <b>B</b> <b>C</b> <b>D</b> / <font></font>'
soup = BeautifulSoup(s)
for i in soup.find_all(text='■'):
for ii in i.find_next_siblings():
if ii.name=='font' or str(ii).lstrip('')[0:1]=='/':
break
else:
if ii.name=='b':
tag = soup.new_tag('span')
tag['style'] = 'REPLACE'
tag.string=ii.string
print(ii.replace_with(tag))
print(soup)
More information about the Python-list
mailing list