使用bs4进行webscraping验证

时间:2017-11-22 13:12:59

标签: python beautifulsoup

不确定为什么,但今天这段代码没有按预期工作(我已经使用过相同的代码用于不同的html并且像魅力一样工作)。 我试图找出文本" Anular"在HTML代码中。但是,当文本在那里可见时,它始终是否为。

代码是:

    from bs4 import BeautifulSoup
    import re
    html = browser.page_source
    soup = BeautifulSoup(html, "html.parser")
    if soup.findAll(text = re.compile('Anular')):
       registo2 = "Yes"
    else:
       registo2 = "No"

Html是(部分):

</td>
</tr></tbody></table>
<span class="filter" style="display: block; width: 100%; position: absolute; top:17px;" id="Almoço">
<form action="" method="post" name="itens" id="item_frm">
<input type="hidden" name="item" value="30" /><span style="top: 70px;" class="item_check2">Marcada</span><br /><div style="display:none;z-index:1000;position:fixed;" class="divBlockClass" id="divBlock7172"></div><br /><div style="z-index:10001;" id="msgbox_ref_7172" class="msgbox_ref"><span id="msg_ref_7172"></span><br /><br /><input type="submit" onclick="
                                        document.getElementById('msgbox_ref_7172').style.visibility='hidden'" onmouseout="this.className='input_off'" onmouseover="this.className='input_on'" name="SetData" class="input_off" id="btn_marcar" value="   OK   " /> 
                                        <input type="button" onclick="document.getElementById('msgbox_ref_7172').style.visibility='hidden';document.getElementById('divBlock7172').style.display='none'" onmouseout="this.className='input_off'" onmouseover="this.className='input_on'" class="input_off" value="Cancelar" />
                                        </div><br /><span class="itemref_btn">
                                                                        <input type="button" "="" onclick="document.getElementById('marcada').value='true';document.getElementById('divBlock7172').style.display='block'; document.getElementById('msgbox_ref_7172').style.visibility='visible';
                                                                        document.getElementById('msgbox_ref_7172').style.top=event.pageY+'px';
                                                                        document.getElementById('msg_ref_7172').innerHTML='Tem a certeza que deseja anular?';" onmouseout="this.className='input_off'" onmouseover="this.className='input_on'" style="cursor: pointer; width: 112px;" value="Anular Refeição" class="input_off" id="btn_anular_7172" /></span><table cellspacing="0" cellpadding="0" border="0" width="95%;" id="conteudoTabela">

知道为什么不工作?在regexp中可以改进的东西?  感谢。

1 个答案:

答案 0 :(得分:1)

在你提供的html中,你要找的字符串包含在标签的'value'属性中 所以你的代码是:

if soup.find_all(value=re.compile('Anular')):
    registo2 = "Yes"
else:
    registo2 = "No"

或者,如果您想检查文字或属性中的字符串,可以使用find_all中的function

def f(tag):
    return 'Anular' in tag.get('value', '') or 'Anular' in (tag.string or '')

registo2 = "Yes" if soup.find_all(f) else "No"