2017-11-22 4 views
1

なぜこのコードが期待どおりに機能しないのか分かりません(別のHTMLに同じコードを使用し、魅力的に働いています)。 "Anular"という文字列がHTMLコードに含まれているかどうかを調べようとしています。しかし、そこにテキストが表示されている場合は、常にNoとして表示されます。ウェブスクラップ検証用にbs4を使用

コードは次のとおりです。

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

動作していない理由を任意のアイデア?正規表現で改善できるものはありますか?おかげさまで

+0

インポートはパーサーの宣言後に行われます。 – Mai

+0

IDLEから間違ったコピー貼り付け。それを一瞬で修正します。おかげで – Gonzalo

答えて

1

あなたが探している文字列は、タグの 'value'属性に含まれています。
だからあなたのコードは次のようになります。

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

それとも、テキスト内の文字列をチェックするか、find_allfunctionを使用することができる属性の場合。

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

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

ありがとう。今、私は分かる。 – Gonzalo

関連する問題