当有孩子时,re.compile不适用于BeautifulSoup4文本元素

时间:2017-09-14 19:13:08

标签: python beautifulsoup html-parsing

如果h4标记中没有子项,我有以下工作正常:

if (BS.find('div', {"id" : "table_content"}).find('h4', text=re.compile(".*Super Users.*"))):
    print "Found Super Users!"

但是,当h4标记有子项时,打印永远不会发生。我尝试使用以下方法进行调试:

for h4 in BS.find('div', {"id" : "table_content"}).findAll('h4'):
    print h4.text

产生:

Users 
Super Users
    (TMP)
     

Administrators
....

基本上,(TMP)部分似乎正在抛弃它,因为它是来自h4标记的子文本的文本,如下所示:

<h4>Super User
    <span>(<a href="/tmp">TMP</a>)</span>
</h4>

这样做的缺点是(TMP)并不总是存在,所以我不能做出假设。我只需要知道Super User是否在h4的文本中,然后我就可以继续。

1 个答案:

答案 0 :(得分:2)

请勿在{{1​​}}参数中设置标记类型(h4)或将其单独设置为BS的方法:

find

if (BS.find('div', {"id" : "table_content"}).find(text=re.compile(".*Super Users.*"))):
    print "Found Super Users!"