关于while循环与for循环
首先看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)