【问题标题】:find string inside a line in Beautiful Soup在 Beautiful Soup 中的一行中查找字符串
【发布时间】:2021-06-11 11:40:31
【问题描述】:

我想用 data-correct="1" 找到答案。这是我的原文:

<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>

我的代码:

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

它返回 None 而不是 d.Dhaka 作为结果。

您的回答将不胜感激。

编码愉快:)

【问题讨论】:

    标签: python-3.x beautifulsoup


    【解决方案1】:

    不需要正则表达式。搜索所有li标签,css类answerdata-correct属性值'1'更方便:

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

    【讨论】:

      【解决方案2】:

      我已将您的数据转换为 html,您可以找到 li 标签并在 find 方法中提供额外的 attrs 以获取文本

      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)
      

      输出:

      'd.Dhaka'
      

      【讨论】:

      • 非常感谢您的回复。我尝试运行您的代码并收到以下错误:AttributeError: 'NoneType' object has no attribute 'get_text'。你能建议我如何解决这个问题吗?再次提前感谢。
      • 哦,在 li 标签中有 2 个类,它在其中占用 "class":"rd_ques_ans",所以你可以改变它
      • 非常感谢您的回复。它正在工作。我正面临以下模式&lt;p class="answer"&gt;&lt;i aria-hidden="true" class="fa fa-circle"&gt;&lt;/i&gt; holy place&lt;/p&gt; 的另一个问题我正在尝试这种方式:ans.find('p', attrs={'class':'answer','i':'fa fa-circle'}).get_text(strip=True) 但没有得到。你能建议我如何获得“圣地”这个文字吗?提前致谢。
      • @Mehady 你应该用代码创建另一个帖子,这样会更好地理解
      • 感谢您的回复。根据您的建议,我创建了另一个帖子,here is the link:您可以看看吗?再次提前感谢。
      猜你喜欢
      • 2013-02-28
      • 2022-07-16
      • 2021-02-28
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      相关资源
      最近更新 更多