0

我正在使用 Beautiful Soup 搜索以下 HTML 以查找某些关键字,当找到关键字时,返回包含在下一个div带有 class的文本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>
4

1 回答 1

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
于 2013-08-23T15:59:04.750 回答