scrapy shell通过列表生成式未得到正确的结果,与单独测试不一致
过程
今天用 scrapy shell 做爬虫测试的时候,列表生成式语法 [x for x in x_s if x != ""] 的结果和单独测试的结果不一致,让我出乎意料。如下图:
上图是 scrapy shell 上,我用pyquery语法提取的数据的到的结果并没有过滤掉 "" 元素,然后我又单独将这个结果复制到了 python shell 上,用同样的例子进行测试,结果如下图:
可以看到得出的结果却是自己想要的。
结论问题
屡一下问题:用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()]
万分感谢各位大佬解惑,谢谢!
回答:
看上去item的类型是个对象,你把对象直接跟空字符串做比较应该不行。
你尝试把最后的条件修改下:
item!=='' 改成
item.text()!=''
# 生成器语法[item.text() for item in doc(".recommendations-bd").find("a").items() if item.text()!='']
以上是 scrapy shell通过列表生成式未得到正确的结果,与单独测试不一致 的全部内容, 来源链接: utcz.com/a/162959.html