如果语句比较从beautifulsoup中提取的变量值

时间:2017-02-16 19:34:58

标签: python if-statement unicode beautifulsoup

我经过几次迭代后陷入困境,无法弄清楚我在这里遇到了什么错误,但我认为它与我正在看的变量类型有关。

我正在从网站解析一些html:

scanline

当我评估no_product的值时,我发现:

for

当我现在尝试评估if语句时,这不起作用:

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

此if子句始终返回' Failure'。我试图将no_product变量编码为

的字符串
print no_product
#No Product
print type(no_product)
#<type 'unicode'>

if语句仍将返回&#39; Failure&#39;。

我正在运行Python 2.7.10。

2 个答案:

答案 0 :(得分:0)

如评论中所述,print repr(no_product)输出u'\nNo Product\n'。这意味着no_product的值包括前导和尾随换行符。

为了使比较成功,您需要删除换行符:

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

或更改您正在测试的字符串:

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

答案 1 :(得分:0)

我会说正确的'if'语句应该是:

if no_product == u'No Product':

u告诉Python它是一个unicode字符串。

但是,我建议您使用in关键字代替直接相等:

if 'No Product' in no_product:

这将假设no_product不会包含短语“no Product”,除非结果符合您的预期。我也喜欢in构造,因为它消除了隐藏的空格创建不匹配的可能性。