2017-02-16 6 views
1

の場合、私はいくつかの繰り返しの後に立ち往生し、ここで間違っていることを理解することができませんが、私はそれが私が見ている可変型と関係があると仮定します。beautifulsoupから抽出した変数の値を比較するステートメントが

私はサイトから一部のHTMLを解析しています

:私は今、これが動作しないif文を評価しようとすると

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

:私は、私が見つけno_productの値を評価するとき

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 

out:

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

このif節は常に「失敗」を返します。文字列としてno_product変数をエンコードしようとしました。

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

なお、if文は「失敗」を返します。

私はPython 2.7.10を実行しています。

+0

'print repr(no_product)'は何の出力ですか? – jwodder

+0

u '\ nNo Product \ n' – Tom

+0

Tomが言ったように、単にuを追加します。私は彼があなたに改行が必要であると確信していません。 – 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構成が気に入っています。なぜなら、隠れた空白が不一致になる可能性を排除するからです。

関連する問題