2016-04-30 67 views
2

我是一名python/scrapy新手。我想刮一個網站的做法,基本上當數據-SRC存在,那麼我想從IMG :: ATTR(數據-SRC)使用值,python如何做else語句

def parse(self, response): 

    for item in items: 

    listing['img'] = item.css('div img::attr(data-src)').extract() 

否則如果數據 - SRC不存在,則使用IMG :: ATTR(SRC)

listing['img'] = item.css('div img::attr(src)').extract() 

但問題是如何做到這一點的if語句?

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() 

當然,這並不工作,它有一個錯誤:

SyntaxError: invalid syntax 

感謝您的幫助和投入!

+0

的可能的複製[函數和如果 - 其他在python中。 Codeacademy](http://stackoverflow.com/questions/15149667/functions-and-if-else-in-python-codeacademy) –

+0

@ BoltClock♦你是對的,它確實應該是關於使用多個CSS選擇器的最佳方式。 –

回答

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() 
+1

它就像一個魅力!感謝您的快速響應,@avstenit –

1

內嵌的if/else在Python:

result = "X was 2" if x == 2 else "X wasn't 2" 

更可讀,雖然在大多數情況下,說:

if x == 2: 
    # Do something 
else: 
    # Do something else 
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() 
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

在你的情況,你可以做到以下幾點:

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裏是強制性的。

1

,讓你的代碼,總之,你可以使用使用多個CSS選擇或條件,

div img::attr(data-src), div img::attr(src) 

所以它應該爲你工作,以及這是非常短的,然後if else代碼

listing['img'] = item.css('div img::attr(data-src), div img::attr(src)').extract() 
+0

嘗試過,但不知何故,這不起作用(具有相同的結果),如果其他。 –

+0

@WillW你能分享我的網址嗎? –