commentary = soup.find('div', {'id' : 'live-text-commentary-wrapper'})
findtoure = commentary.find(text = re.compile('Gnegneri Toure Yaya')).replace('Gnegneri Toure Yaya', 'Yaya Toure')
Commentary contains various instances of Gnegneri Toure Yaya that need changing to Yaya Toure.
findAll()
doesn't work as findtoure is a list.
The other problem I have is this code simply finds them and replaces them into a new variable called findtoure, I need to replace them in the original soup.
I think I am just looking at this from the wrong perspective.
To replace the inner text of a tag in Beautiful Soup, use the replace_with(~) method.
find is used for returning the result when the searched element is found on the page. find_all is used for returning all the matches after scanning the entire document.
If the text and the string to replace is simple then use str. replace().
You cannot do what you want with just .replace()
. From the BeautifulSoup documentation on NavigableString
:
You can’t edit a string in place, but you can replace one string with another, using
replace_with()
.
That's exactly what you need to do; take each match, then call .replace()
on the contained text and replace the original with that:
findtoure = commentary.find_all(text = re.compile('Gnegneri Toure Yaya'))
for comment in findtoure:
fixed_text = comment.replace('Gnegneri Toure Yaya', 'Yaya Toure')
comment.replace_with(fixed_text)
If you want to use these comments further, you'll need to do a new find:
findtoure = commentary.find_all(text = re.compile('Yaya Toure'))
or, if you all you need is the resulting strings (so Python str
objects, not NavigableString
objects still connected to the BeautifulSoup
object), just collect the fixed_text
objects:
findtoure = commentary.find_all(text = re.compile('Gnegneri Toure Yaya'))
fixed_comments = []
for comment in findtoure:
fixed_text = comment.replace('Gnegneri Toure Yaya', 'Yaya Toure')
comment.replace_with(fixed_text)
fixed_comments.append(fixed_text)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With