2013-08-23 31 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教程。 –

相關問題