scrapy shell通过列表生成式未得到正确的结果,与单独测试不一致

过程

今天用 scrapy shell 做爬虫测试的时候,列表生成式语法 [x for x in x_s if x != ""] 的结果和单独测试的结果不一致,让我出乎意料。如下图:
image.png
上图是 scrapy shell 上,我用pyquery语法提取的数据的到的结果并没有过滤掉 "" 元素,然后我又单独将这个结果复制到了 python shell 上,用同样的例子进行测试,结果如下图:
image.png

image.png
可以看到得出的结果却是自己想要的。

结论问题

屡一下问题:用pyquery 的生成式语法得到的结果,和单独的测试生成式语法的结果出现了不一致,都是列表,为什么这里不能过滤掉列表中的 "" 符号呢?

代码
# scrapy调试:
scrapy shell -s USER_AGENT="Mozilla/5.0 (iPad; CPU OS 11\_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1" "https://movie.douban.com/subject/1292052/"

# 生成器语法
[item.text() for item in doc(".recommendations-bd").find("a").items() if item!='']

# 通过其他途径已经解决的方法:
[item.text() for item in doc(".recommendations-bd dl dd a").items()] 

万分感谢各位大佬解惑,谢谢!

阅读 2.1k
1 个回答

看上去item的类型是个对象,你把对象直接跟空字符串做比较应该不行。

你尝试把最后的条件修改下:
item!=='' 改成
item.text()!=''

# 生成器语法
[item.text() for item in doc(".recommendations-bd").find("a").items() if item.text()!='']
推荐问题
宣传栏