2017-02-16 28 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构造,因为它消除了隐藏空白创建不匹配的可能性。