find string inside a line in Beautiful Soup

Viewed 45

I want to find the answer with data-correct="1". Here is my source text:

<ul class="list-group">
                    <li class="list-group-item list-ques"><b>1.</b> What the capital of Bangladesh?
 </li>
                                <li class="answer" data-qid="1" data-ans="a" data-correct="0" name="ans_4665" class="rd_ques_ans">
                                a. Chittagong                       
                        </li>
                                <li class="answer" data-qid="1" data-ans="b" data-correct="0" name="ans_4665" class="rd_ques_ans">
                                b.Khulna                            
                        </li>
                                <li class="answer" data-qid="1" data-ans="c" data-correct="0" name="ans_4665" class="rd_ques_ans">
                                c.Satkhira                      
                        </li>
                                <li class="answer" data-qid="1" data-correct="1" # name="ans_4665" class="rd_ques_ans">
                                d.Dhaka
                        </li>                                   
                </ul>

my code:

ans_block = soup.find_all('ul', attrs = {'class': 'list-group'})
my_answer = q.find('li', attrs = {'class':'answer'}).find(re.compile('data-correct="1"')).string

Its returns None instead of d.Dhaka as result.

Your answer will be appreciated.

Happy coding :)

2 Answers

There is no need for a regular expression. It's more convenient to search for all li tags with css class answer and the data-correct attribute with value '1':

my_answer = q.find('li', attrs = {'class':'answer', 'data-correct' : '1'}).text.strip()

I have taken your data as html and you can find li tag and give additional attrs in find method to get text

html="""<ul class="list-group">
                        <li class="list-group-item list-ques"><b>1.</b> What the capital of Bangladesh?
     </li>
                                    <li class="answer" data-qid="1" data-ans="a" data-correct="0" name="ans_4665" class="rd_ques_ans">
                                    a. Chittagong                       
                            </li>
                                    <li class="answer" data-qid="1" data-ans="b" data-correct="0" name="ans_4665" class="rd_ques_ans">
                                    b.Khulna                            
                            </li>
                                    <li class="answer" data-qid="1" data-ans="c" data-correct="0" name="ans_4665" class="rd_ques_ans">
                                    c.Satkhira                      
                            </li>
                                    <li class="answer" data-qid="1" data-correct="1" # name="ans_4665" class="rd_ques_ans">
                                    d.Dhaka
                            </li>                                   
                    </ul>"""


soup= BeautifulSoup(html, 'html.parser')
main=soup.find("ul",class_="list-group")
main.find("li",attrs={"class":"rd_ques_ans","data-correct":"1"}).get_text(strip=True)

Ouput:

'd.Dhaka'
Related