Python 如何从解析的HTML打印特定元素?

Python 如何从解析的HTML打印特定元素?,python,html,python-3.x,parsing,beautifulsoup,Python,Html,Python 3.x,Parsing,Beautifulsoup,我正试图从我的BS4解析的HTML代码字符串中打印出特定的行 我希望我的最终结果如下所示: 如何打印此问题 a。我想打印这个 b。我也想打印这个 c。我也想把这个打印出来 d。我也想把这个打印出来 正确答案是:我想打印这个 并复制到文本编辑器,以便更轻松地用眼睛导航。我的最终结果包括打印第23、33、39、45、51和63行。我如何做到这一点 <div class="que multichoice deferredfeedback correct" id="q7"> <d

我正试图从我的BS4解析的HTML代码字符串中打印出特定的行

我希望我的最终结果如下所示:

如何打印此问题

a。我想打印这个

b。我也想打印这个

c。我也想把这个打印出来

d。我也想把这个打印出来

正确答案是:我想打印这个

并复制到文本编辑器,以便更轻松地用眼睛导航。我的最终结果包括打印第23、33、39、45、51和63行。我如何做到这一点

<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
我的每个源代码txt文件都包含10个选择题,我希望代码以以下格式打印:

QText

答复0-3

正确答案

(然后重复此循环,直到不再剩余或重复9次)

---现在,它返回以下内容---

QText(x10)

回答0-3(x10)

RightAnswer(x10)


如何更改此选项以完成一个检索1个qtext、4个answer0-3以及1个Right Answer的循环,然后再开始另一个循环?

可以使用
标记或
类找到所有元素

print(soup.find('div', class_='qtext').text.strip())

# HOW DO I PRINT THIS QUESTION?

for item in soup.find_all('label'):
    print(item.text.strip())

# a. I WANT TO PRINT THIS
# b. I WANT TO PRINT THIS TOO
# c. I WANT TO PRINT THIS ALSO
# d. I WANT TO PRINT THIS AS WELL

print(soup.find('div', class_='rightanswer').text.strip())

# THE CORRECT ANSWER IS: I WANT TO PRINT THIS
除了
.text.strip()
之外,您还可以使用
.get\u text(strip=True)


完整代码:

data = '''
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
'''

from bs4 import BeautifulSoup as BS

soup = BS(data, 'html.parser')

print(soup.find('div', class_='qtext').text.strip())
for item in soup.find_all('label'):
    print(item.text.strip())
print(soup.find('div', class_='rightanswer').text.strip())
data = '''
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
'''  

from bs4 import BeautifulSoup as BS

soup = BS(data, 'html.parser')

all_questions = soup.find_all('div', class_='qtext')
all_choices = soup.find_all('label')
all_answers = soup.find_all('div', class_='rightanswer')

for x in range(len(all_questions)):
    print(all_questions[x].text.strip())

    y = x*4
    for item in all_choices[y:y+4]:
        print(item.text.strip())

    print(all_answers[x].text.strip())
    print('---')

完整代码-我复制了相同的HTML以模拟两个问题:

data = '''
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
'''  

from bs4 import BeautifulSoup as BS

soup = BS(data, 'html.parser')

for questions in soup.find_all('div', class_='multichoice'):

    print(questions.find('div', class_='qtext').text.strip())
    for item in questions.find_all('label'):
        print(item.text.strip())
    print(questions.find('div', class_='rightanswer').text.strip())
    print('---')

完整代码:

data = '''
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
'''

from bs4 import BeautifulSoup as BS

soup = BS(data, 'html.parser')

print(soup.find('div', class_='qtext').text.strip())
for item in soup.find_all('label'):
    print(item.text.strip())
print(soup.find('div', class_='rightanswer').text.strip())
data = '''
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
'''  

from bs4 import BeautifulSoup as BS

soup = BS(data, 'html.parser')

all_questions = soup.find_all('div', class_='qtext')
all_choices = soup.find_all('label')
all_answers = soup.find_all('div', class_='rightanswer')

for x in range(len(all_questions)):
    print(all_questions[x].text.strip())

    y = x*4
    for item in all_choices[y:y+4]:
        print(item.text.strip())

    print(all_answers[x].text.strip())
    print('---')
data=''
问题:
7.
对的
标记1.00中的1.00
问题文本
如何打印此问题?
选择一个:
A.我想打印这个
B我也想打印这个
C我也想把这个打印出来
D我也想把这个打印出来
反馈
正确答案是:我想打印这个
问题:
7.
对的
标记1.00中的1.00
问题文本
如何打印此问题?
选择一个:
A.我想打印这个
B我也想打印这个
C我也想把这个打印出来
D我也想把这个打印出来
反馈
正确答案是:我想打印这个
'''  
从bs4导入BeautifulSoup作为BS
soup=BS(数据“html.parser”)
所有问题=汤。查找所有问题('div',class='qtext')
全部选项=汤。全部查找('标签')
所有答案=汤。查找所有答案('div',class='rightanswer')
对于范围内的x(len(所有问题)):
打印(所有问题[x].text.strip())
y=x*4
对于所有_选项中的项目[y:y+4]:
打印(item.text.strip())
打印(所有答案[x].text.strip())
打印('--')

始终将代码、错误消息和数据作为有问题的文本,而不是imageshow代码和完整的错误消息。好吧,我省略了一些信息,因为我不知道这可能会如何影响在这个问题上获得帮助。我有多页类似的源代码,每一页都有10次代码迭代。根据这段代码,它列出了所有10个问题,然后列出了所有40个选择题答案,然后列出了所有10个正确答案。如何更改此选项以按以下顺序返回-问题,4个多选项答案,正确答案,重复x9?您可以找到保留一个问题的所有元素(问题,答案,正确答案)的标记-即,
-首先查找所有这些元素,然后在这些元素内搜索问题,答案,正确答案。或者您可以尝试使用
for
-循环和/或
zip()
对元素进行分组-即
对于问题,请在zip中更正答案(所有问题,所有正确答案)
,对于选项,您可以使用slice-
对范围(0,40,4)中的x使用:选项[x:x+4]
我在两种方法的答案示例中添加了这两种方法。
data = '''
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
<div class="que multichoice deferredfeedback correct" id="q7">
   <div class="info">
    <h3 class="no">
     Question
     <span class="qno">
      7
     </span>
    </h3>
    <div class="state">
     Correct
    </div>
    <div class="grade">
     Mark 1.00 out of 1.00
    </div>
   </div>
   <div class="content">
    <div class="formulation">
     <h4 class="accesshide">
      Question text
     </h4>
     <input name="q7391425:7_:sequencecheck" type="hidden" value="3"/>
     <div class="qtext">
      HOW DO I PRINT THIS QUESTION?
     </div>
     <div class="ablock">
      <div class="prompt">
       Select one:
      </div>
      <div class="answer">
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer0" name="q7391425:7_answer" type="radio" value="0"/>
        <label for="q7391425:7_answer0">
         a. I WANT TO PRINT THIS
        </label>
       </div>
       <div class="r1 correct">
        <input checked="checked" disabled="disabled" id="q7391425:7_answer1" name="q7391425:7_answer" type="radio" value="1"/>
        <label for="q7391425:7_answer1">
         b. I WANT TO PRINT THIS TOO
        </label>
       </div>
       <div class="r0">
        <input disabled="disabled" id="q7391425:7_answer2" name="q7391425:7_answer" type="radio" value="2"/>
        <label for="q7391425:7_answer2">
         c. I WANT TO PRINT THIS ALSO
        </label>
       </div>
       <div class="r1">
        <input disabled="disabled" id="q7391425:7_answer3" name="q7391425:7_answer" type="radio" value="3"/>
        <label for="q7391425:7_answer3">
         d. I WANT TO PRINT THIS AS WELL
        </label>
       </div>
      </div>
     </div>
    </div>
    <div class="outcome">
     <h4 class="accesshide">
      Feedback
     </h4>
     <div class="feedback">
      <div class="rightanswer">
       THE CORRECT ANSWER IS: I WANT TO PRINT THIS
      </div>
     </div>
    </div>
   </div>
  </div>
'''  

from bs4 import BeautifulSoup as BS

soup = BS(data, 'html.parser')

all_questions = soup.find_all('div', class_='qtext')
all_choices = soup.find_all('label')
all_answers = soup.find_all('div', class_='rightanswer')

for x in range(len(all_questions)):
    print(all_questions[x].text.strip())

    y = x*4
    for item in all_choices[y:y+4]:
        print(item.text.strip())

    print(all_answers[x].text.strip())
    print('---')