我经过几次迭代后陷入困境,无法弄清楚我在这里遇到了什么错误,但我认为它与我正在看的变量类型有关。
我正在从网站解析一些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。
答案 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
构造,因为它消除了隐藏的空格创建不匹配的可能性。