cnian
cnian

Reputation: 249

is it possible to change parent of html element with python beautifulsoup

Let's assume I have a html like following:

<div class="question-div"></div>
<div class="answer-div"></div>
<div class="question-div"></div>
<div class="answer-div"></div>
<div class="question-div"></div>
<div class="answer-div"></div>

I want to move all divs with the class answer-div into the previous question-div. Can I handle it with beautifulsoup?

Upvotes: 3

Views: 857

Answers (2)

Bitto
Bitto

Reputation: 8255

You can also use insert

from bs4 import BeautifulSoup
html="""
<div class="question-div"></div>
<div class="answer-div"></div>
<div class="question-div"></div>
<div class="answer-div"></div>
<div class="question-div"></div>
<div class="answer-div"></div>
"""
soup=BeautifulSoup(html,'html.parser')
for div in soup.findAll('div',{"class":"answer-div"}):
    div.find_previous_sibling('div').insert(0,div)
print(soup)

Output

<div class="question-div"><div class="answer-div"></div></div>

<div class="question-div"><div class="answer-div"></div></div>

<div class="question-div"><div class="answer-div"></div></div>

Upvotes: 1

DirtyBit
DirtyBit

Reputation: 16792

No hands-on experience with beautifulsoup but I will give this one a shot!

The way I look at it is, you find all the div's with question and answer separately.

div_ques_Blocks = soup.find_all('div', class_="question-div")
div_ans_Blocks = soup.find_all('div', class_="answer-div")

and then loop through the question-div to insert/append the answer-div

for divtag in div_ans_Blocks :
       print divtag.find_previous_sibling('div')

If the above print statement gives you all the answer-div, you can then try appending them instead of priting, maybe like this?

Upvotes: 0

Related Questions