我正在使用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>
答案 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