我无法理解为什么会发生这种错误。 首先,我写了
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获得1张图片。但是最初正确的代码可以从API获得1000张图片。我在第一段代码中修复了缩进,所以我的代码就像
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张图片。但我无法理解为什么我可以通过修复缩进来这样做。请给我一些解释。
答案 0 :(得分:0)
因为在第一个示例中,只有在条件通过时才会获得图像:
if not os.path.exists(path):
该条件只会传递一次,因为您会立即创建路径:
os.makedirs(path)
对于循环的每个其他迭代,条件为false。因此,条件块中的代码不会执行。
基本上,只有条件为真时才会执行if
块。当您移动if
块的代码 out 时,无论条件如何,它总是会执行。