如何在python中使用if语句

时间:2016-04-30 08:23:25

标签: python python-2.7 scrapy

我是一个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')
                                 )

感谢您的帮助和意见!

6 个答案:

答案 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