我是一个python / scrapy新手。我试图抓一个网站进行练习,基本上当 data-src 存在时,我想使用 img :: attr(data-src), <的值/ p>
listing['img'] = item.css('div img::attr(src)').extract()
否则如果data-src不存在则使用 img :: attr(src)
listing['img'] = if item.css('div img::attr(data-src)'): item.css('div img::attr(data-src)').extract() else: item.css('div img::attr(src)').extract()
但问题是如何在if语句中执行此操作?
SyntaxError: invalid syntax
当然这不起作用,它有一个错误:
where (SF_F_Name, SF_L_Name) IN ( ('Tony', Richardson'),
('Dennis', Viehland),
('Kay','Fielden')
)
感谢您的帮助和意见!
答案 0 :(得分:3)
如果您正在寻找ternary operator,请使用以下语法:
a = "thing" if test else "other_thing"
所以在你的情况下它会:
listing['img'] = item.css('div img::attr(data-src)').extract() if item.css('div img::attr(data-src)') else item.css('div img::attr(src)').extract()
如果您想要if else condition,请按以下步骤操作:
if test1:
# your stuff
elif test2:
# your other stuff
所以在你的情况下它会
if item.css('div img::attr(data-src)'):
listing['img'] = item.css('div img::attr(data-src)').extract()
else:
listing['img'] = item.css('div img::attr(src)').extract()
在我看来,这种情况更具可读性。
答案 1 :(得分:1)
在Python中内联if / else:
result = "X was 2" if x == 2 else "X wasn't 2"
在大多数情况下更具可读性:
if x == 2:
# Do something
else:
# Do something else
答案 2 :(得分:1)
也许这个:
for item in items:
if item.css('div img::attr(data-src)'):
listing['img'] = item.css('div img::attr(data-src)').extract()
else:
listing['img'] = item.css('div img::attr(src)').extract()
答案 3 :(得分:1)
您对if
使用了错误的位置。它的工作原理如下:
>>> x = 2
>>> y = 3 if x==2 else 4
>>> y
3
>>>
因此,您必须将该行更改为:
>>> listing['img'] = item.css('div img::attr(data-src)').extract() if item.css('div img::attr(data-src)') else item.css('div img::attr(src)').extract()
答案 4 :(得分:1)
在您的情况下,您可以执行以下操作:
def parse(self, response):
for item in items:
if item.css('div img::attr(data-src)'):
listing['img'] = item.css('div img::attr(data-src)').extract()
else:
listing['img'] = item.css('div img::attr(src)').extract()
重要提示:请注意Python中必须使用的缩进。
答案 5 :(得分:1)
为了缩短您的代码,您可以使用多个css选择器或使用条件class silence(object):
def __init__(
self,
stdout = None,
stderr = None
):
if stdout == None and stderr == None:
devnull = open(os.devnull, "w")
# Assign devnull to stdout and stderr
stdout = devnull
stderr = devnull
self._stdout = stdout or sys.stdout
self._stderr = stderr or sys.stderr
,
所以它应该对你有效,这比div img::attr(data-src), div img::attr(src)
代码
if else