2013-08-23 26 views
0

我搜索以下HTML与美丽的汤为某些关键字,当一个关键字被发现返回包含在divds_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

你只需要检查<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 
+0

零嗨是否有可能只是搜索DVI端口,在上面的代码?我有很多其他值要搜索,并希望保持每个搜索分开。 – Ninja2k

+0

@ Ninja2k是的,当然(尽管这会是一种糟糕的编写代码的方式 - 如果你为很多稍微不同的情况编写几乎完全相同的代码块,那么你正在做一些*错误的*错误的)。无论如何,使用我在上面显示的内容来完成你所要求的操作是微不足道的:如果你不知道如何去做,你需要阅读Python教程。 –

相关问题