首先看for循環
def test(): print('1') print('2') for i in range(3): test()
執行後的結果,按照下圖所示,for循環就是把指定的函數重複執行N次,這裏是3次
再看看while循環
def test(): print('1') print('2') while(2): test()
看結果,我這裏是用ctrl+v手動結束的,按照上面的代碼while循環的效果就是,每一執行兩遍test函數,然後一直循環下去,一直到手動停止
while循環一般用於條件類判斷循環
比如獲取一個圖片列表,如果列表爲空,則一直獲取,知道獲取到內容未知
下面的腳本就是典型的while循環應用
通過獲取圖片列表長度是否空,判斷是否循環執行
import os.path import time from lxml import etree import requests headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'referer': 'https://wallroom.io/', 'sec-fetch-dest': 'image' } def get_images_list(): response = requests.get( 'https://wallroom.io/', headers=headers ).text html = etree.HTML(response) return html.xpath('//div[@class="image-list"]/div/a/@href') def run(): images_list = get_images_list() if not len(images_list): print('獲取圖片列表失敗') return False if not os.path.exists('圖片採集'): os.mkdir('圖片採集') url = 'https://wallroom.io/img/' for images in images_list: splits = images.split('/') resolving = splits[1] name_split = splits[2] file_name = '圖片採集/' + resolving + '-' + name_split + '.jpg' if not os.path.exists(file_name): images_content = requests.get( url + resolving + '/' + name_split + '.jpg', headers=headers ) if 'image' in images_content.headers['Content-Type']: print(name_split + '.jpg') with open(file_name, 'wb') as f: f.write(images_content.content) if __name__ == '__main__': while True: run() time.sleep(10)