关于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)

 

posted @ 2021-12-03 17:02  小贝书屋  阅读(123)  评论(0编辑  收藏  举报