2017-04-06 12 views
-1

このエラーがなぜ発生するのか理解できません。 、私はこのコードを実行することにより、インデントが間違っているのはなぜ間違った機能ですか?

import urllib.request 
from bs4 import BeautifulSoup 
import time 
import os 

def download_image(url,name): 
    path = "./scrape_image/" 
    imagename = str(name) + ".jpg" 

    if not os.path.exists(path): 
     os.makedirs(path) 

     print(path) 
     urllib.request.urlretrieve(url,path+imagename) 


url = "https://api.XXXkeyword=YYY&limit=1000" 
response = urllib.request.urlopen(url) 
rss = response.read().decode("utf-8") 

soup = BeautifulSoup(rss, "xml") 

name=0 
for s in soup.find_all("photo"): 
    url = s.find_all("image_url")[0].string 
    name+=1 
    download_image(url, name) 

を書いて、私はもともと右のコードが最初のコードでAPI.I固定インデントから1000枚の画像なので、私のコードを取得することができますAPI.Butから1枚の画像を最初に取得することができますis like

import urllib.request 
from bs4 import BeautifulSoup 
import time 
import os 

def download_image(url,name): 
    path = "./image/" 
    imagename = str(name) + ".jpg" 

    if not os.path.exists(path): 
     os.makedirs(path) 

    print(path) 
    urllib.request.urlretrieve(url, path+imagename) 
    time.sleep(1) 


url = "https://api.XXXkeyword=YYY&limit=1000" 
response = urllib.request.urlopen(url) 
rss = response.read().decode("utf-8") 

soup = BeautifulSoup(rss, "xml") 

name = 0 
for s in soup.find_all("photo"): 
    url = s.find_all("image_url")[0].string 
    name+=1 
    download_image(url,name) 

最後に、私はAPIから1000画像を取得できます。しかし、なぜ私はインデントを修正することでそれを行うことができるのか理解できません。私にいくつかの説明をお願いします。

+2

それはPythonなので...? – dasdingonesin

答えて

0

あなたの条件に合格した場合ので、最初の例ではあなただけの画像を取得している:

if not os.path.exists(path): 

をそして、あなたはすぐにパスを作成するので、その条件をのみ一度を渡します:

os.makedirs(path) 

ループを1回おきに繰り返すたびに、条件はfalseになります。したがって、のコードの中に条件ブロックは実行されません。

基本的に、ifブロックは条件が真である場合にのみ実行されます。コードifブロックのに移動すると、ブロックは常に条件に関係なく実行されます。

関連する問題