2017-02-16 27 views
1

我堅持幾次迭代後,不能找出我在這裏得到的錯誤,但我認爲它與我所看到的變量類型有關。如果聲明比較變量值從美麗提取

我解析從一些網站的HTML:

from bs4 import BeautifulSoup 
import urllib2 
url = 'XXX' 

page = urllib2.urlopen(url).read() 
soup = BeautifulSoup(page, "html.parser") 
soup.prettify() 

tag = soup.find("div", { "class" : "no-results--header" }) 
no_product = tag.text 

當我爲no_product評估價值,我覺得:

print no_product 
#No Product 
print type(no_product) 
#<type 'unicode'> 

當我現在嘗試評估if語句這不起作用out:

if no_product == 'No Product': 
    print 'Success' 
else: 
    print 'Failure' 

這個if子句總是返回'Failure'。我試圖編碼no_product變量作爲字符串與

no_product = no_product.encode('ascii','ignore') 

仍然if語句將返回'失敗'。

我正在運行Python 2.7.10。

+0

'print repr(no_product)'輸出是什麼? – jwodder

+0

u'\ n沒有產品\ n' – Tom

+0

湯姆說,只需添加你。我不太確定你需要換行符。 – nycynik

回答

0

正如評論中所述,print repr(no_product)輸出u'\nNo Product\n'。這意味着no_product的值包括前導和尾隨換行符。

爲了比較成功,你需要或者剝離換行符:

if no_product.strip('\n') == 'No Product': 

或更改你的測試字符串:

if no_product == '\nNo Product\n': 
+0

這很有效......非常感謝! – Tom

0

我要說的是正確的「如果'聲明應該是:

if no_product == u'No Product': 

u告訴Python它是一個unicode stri NG。

我建議,但是,而不是直的平等,就充分利用in關鍵字:

if 'No Product' in no_product: 

這會假設,no_product不會預料到包含短語「無產品」,除非結果是你以上的預期。我也喜歡in構造,因爲它消除了隱藏空白創建不匹配的可能性。