如果找到某个标签,我可以返回文本值吗?

时间:2013-08-23 15:43:27

标签: python html-parsing beautifulsoup

我正在使用Beautiful Soup搜索以下关于某些关键字的HTML,当找到关键字时,会返回下一个div中包含类ds_data的文字。在我的情况下,文本是1

这个工作正常,但是一些div包含一个带有红色x的图像来表示0.有没有办法说明是否检测到类spacer_top n-sign的图像然后将其视为文本值'0'?

我的代码

#HDMI
pattern = re.compile(r'\s*%s\s*' % 'HDMI ports quantity')
hdmi_ports = soup.find(text=pattern).findNext('div',{'class':'ds_data'}).text
print hdmi_ports

#DVI Ports
pattern = re.compile(r'\s*%s\s*' % 'DVI port')
dvi_ports = soup.find(text=pattern).findNext('div',{'class':'ds_data'})
print dvi_ports

HTML

<div class="tableRow">
<div class="ds_label">
<span class="tip-anchor tip-anchor-text"> HDMI ports quantity</span>ev
<span class="red line">
<div class="tooltip-text">
</div>
<div class="ds_data"> 1 </div>
</div>
<div class="tableRow">
<div class="ds_label">
<span class="tip-anchor tip-anchor-text"> DVI port</span>ev
<span class="red line">
<div class="tooltip-text">
</div>
<div class="ds_data">
<img src="/imgs/spacer.png" class="spacer_top n-sign" alt="Yes"/>
</div>
</div>

1 个答案:

答案 0 :(得分:0)

您只需使用<div class="ds_data">检查img元素是否包含find()这些类:

for search_text in ('HDMI ports quantity', 'DVI port'):
    pattern = re.compile(r'\s*%s\s*' % search_text)
    ds_data = soup.find(text=pattern).findNext('div', {'class': 'ds_data'})
    if ds_data.find('img', {'class': 'spacer_top n-sign'}):
        result_text = '0'
    else:
        result_text = ds_data.text
    print search_text, result_text

输出:

HDMI ports quantity  1 
DVI port 0