2017-01-16 10 views
1

テキストの一部でHTMLタグを取得する必要があります。私はいくつかの解決策を見つけましたが、それは私にとってはうまく機能しません。正規表現を使ってテキストでタグを見つける方法は?

from bs4 import BeautifulSoup 
import re 
soup = BeautifulSoup(""" 
<table> 
    <tbody> 
     <tr> 
      <td style="width: 100px; height: 20px"> 
       <div style="font-size: 8.7pt"> 
        Арт.: 
        <span id="ContentPlaceHolder1_ContentPlaceHolder1_DataList2_Label12_0"> 1185A</span> 
        </div> 
       <div style="font-size: 12pt; font-weight: bold;"> 
        <span id="ContentPlaceHolder1_ContentPlaceHolder1_DataList2_LoginView3_0_Label12_0">I_CAN_GET_THIS other text</span> 
        I CAN NOT GET THIS?. 
       </div> 
      </td> 
     </tr> 
    </tbody> 
</table> 
""", 'lxml') 
print(soup.find('span', text=re.compile('I_CAN_GET_THIS'))) 
print(soup.find('div', text=re.compile('I_CAN_NOT_GET_THIS'))) 

>>> <span id="ContentPlaceHolder1_ContentPlaceHolder1_DataList2_LoginView3_0_Label12_0">I_CAN_GET_THIS other text</span> 
>>> None 

だから私のことができ、それは後者の場合には動作しませんし、私はそれが動作するために何をすべき理由tは理解できますか? おかげ

答えて

2

(今stringに変更されますが、まだサポートされています)text引数が複数の子がある場合Noneなる要素の.string attributeを使用します。

の場合タグには、複数のものが含まれている、それは.stringが参照すべきか明確ではありませんので、.stringは、これは正確にあなたのターゲットの場合となし

ならないと定義されています要素 - 子要素とテキストノードがspanです。

soup.find(lambda tag: tag.name == 'div' and 'I CAN NOT GET THIS' in tag.get_text()) 
+0

ありがとう:あなたは子供のテキストを組み合わせた.get_text()を使用する場所searching functionを使用し、

soup.find(text=re.compile('I CAN NOT GET THIS')).parent 

または:

代わりに、あなたはテキストノードを検索し、取得することができ、それは親です。あなたの2番目の解決策は私のためにかなり良いです。 – GhostKU

関連する問題